一份友好的 Git 指南

安裝完 git 後,要給這臺電腦配置用戶名、郵箱(以後提交時會自動備註這個名字和郵箱)

git config --global user.name "Your Name" git config --global user.email "[email protected]"

初始化倉庫,把當前目錄加入 git 版本管理(先切換到對應目錄下,初始化後會生成.git文件夾

git init

將未追蹤的新文件添加進倉庫,並提交到倉庫

git add file1.txt 
git add file2.txt file3.txt 
git commit -m "add 3 files."

查看某次 commit 的具體更改內容(eca5a14commit id

git show eca5a14 

查看當前倉庫當前狀態(工作區是否增、刪、改、待提交)

git status

查看當前倉庫某個被改動文件的改動情況 (改動後太久沒提交,忘了和上版本比改了啥時可以用)

git diff readme.txt

查看當前倉庫某個文件與上版本的差別(一般工作區沒有改動時用)

git diff HEAD -- readme.txt

查看當前倉庫操作記錄 (回退的看不到)

git log

只顯示 commit id 和 備註信息

git log --pretty=oneline

查看當前倉庫操作記錄 (回退的也可以看到)

git reflog

回退當前版本到上一個版本(如果已提交到遠程,請勿使用此命令)

git reset --hard HEAD^

回退當前版本到指定版本(1094a 是 commit id,可以用 git log 或 git reflog 去找 commit id 如果已提交到遠程,請勿使用此命令)

git reset --hard 1094a

清除指定文件的最近一次未 add 修改(清除工作區的改動

git checkout -- readme.txt

將 add 到緩存區的修改回退到工作區中

git reset HEAD readme.txt

在版本庫中刪除文件(要提交)

git rm test.txt 
git commit -m "rm test.txt"

生成與遠程倉庫通訊用的密鑰(window生成的密鑰對在.ssh文件夾裏, -C 參數後面的郵箱只是註釋,可以填任何內容)

ssh-keygen -t rsa -C "[email protected]

將本地倉庫與遠程倉庫關聯(關聯並未提交)

git remote add origin [email protected]:xiaoqiang/nicegit.git

將未與遠程分支關聯的本地分支的代碼,提交到遠程倉庫的指定分支,並建立聯繫(-u 是第一次提交時加的,之後再執行 push、pull可以不加參數,默認與第一次 push - u 的遠程分支交互 )

git push -u origin master

克隆遠程庫到本地

git clone [email protected]:xiaoqiang/nicegit.git

克隆到指定名字的新建文件夾下

git clone [email protected]:xiaoqiang/nicegit.git directoryName

創建並切換到新分支

git checkout -b dev

此命令相當於

git branch dev 
git checkout dev

最新版git的創建並切換到新分支

git switch -c dev

最新版git的切換到已有分支

git switch dev

刪除本地分支

git branch -d dev

刪除遠程分支 

先刪除本地的分支,再運行下面的命令刪除遠程的

git push origin --delete dev

將某分支合併到當前分支

git merge dev

如果有衝突,手動解決衝突後,執行

git add readme.txt 
git commit -m "confict fixed"

merge 時有衝突,也可以用 --abort 參數退出 merge,代碼會回退到 merge 前

git merge --abort

git 合併分支時,如果可能會使用 Fast forward 模式(合併後在當前分支看不到被合併分支的提交),可以使用 --no-ff 的方式合併(會給合併單獨生成一次提交,分支的提交也可以看到),用 --no-ff 記得填 -m 信息

git merge --no-ff -m "merge with no-ff" dev

用帶參數的 log 查看分支合併情況 (合併線圖

git log --graph --pretty=oneline --abbrev-commit

如果手頭的功能做到一半,臨時有緊急任務加入,將做到一半的代碼暫存,做完臨時任務再還原

暫存代碼

git stash

查看暫存列表

git stash list

恢復指定暫存的代碼到工作區(stash@{0} 是緩存編號

git stash apply stash@{0}

刪除指定暫存

git stash drop stash@{0}

恢復+刪除指定暫存

git stash pop stash@{0}

摘取其他分支的某次提交,單獨合併到當前分支(切到被摘取分支,用 git reflog 查看commit id,複製 commit id,切到想摘取此次提交的分支

git cherry-pick 4c805e2

順利的話會直接完成,如果衝突需要手動解決衝突、add、用 cherry-pick --continue 提交,提交成功便算完成摘取( cherry-pick --continue 類似於 commit,add . 是添加本地所有修改)

git add . 
git cherry-pick --continue

衝突時,可以用 --quit 參數退出合併,本次合併的內容會保留在工作區 (both modified 狀態)

git cherry-pick --quit

如果衝突時不想合併摘取了,可以用 --abort 參數退出合併,代碼會還原到 cherry-pick 前

git cherry-pick --abort

沒有被合併的分支,被刪除時會報錯,使用 -D 參數強制刪除分支

git branch -D feature-01

顯示本地分支&顯示所有分支(本地+遠程)

只顯示本地分支

git branch

 顯示所有分支

git branch -a

顯示遠程分支&顯示本地擁有該遠程分支的什麼權限

顯示遠程分支

git remote

顯示本地擁有該遠程分支的什麼權限

git remote -v

顯示本地所有分支對應的遠程分支、push到哪、pull哪個分支、是否已設置遠程關聯

git remote show origin

在本地創建一個遠程已有的分支,並關聯(沒有該遠程分支的話會創建失敗)

git checkout -b dev origin/dev

將沒有關聯遠程分支的本地分支與遠程分支進行關聯origin/dev 是遠程分支,dev 是本地分支)

git branch --set-upstream-to origin/dev dev

基於遠程分支,在本地創建一個同名的分支

git checkout --track origin/dev

推送本地當前分支的代碼到遠程指定分支(需要當前本地分支與遠程分支有關聯,不然會提示沒權限。如果遠程沒有對應的分支,那會在遠程新建該分支)

git push origin dev

如有 push 時衝突,需 pull 拉取代碼,手動解決衝突代碼,並 add、commit 一次再 push

git pull origin dev

pull 相當於(fetch 將遠程分支的最新提交拉到本地倉庫,fetch 不會改動到本地代碼

                     merge FETCH_HEAD:將剛拉取的最新提交與本地分支合併)

git fetch origin dev 
git merge FETCH_HEAD

拉取某分支的遠程分支的最新提交,覆蓋本地分支放棄本地修改,並更新本地分支與遠程分支一樣狀態)

將遠程分支的最新提交拉到本地倉庫,fetch 不會改動到本地代碼

git fetch origin dev

查看剛拉下來的遠程分支的最新commit與本地代碼的差異

git log -p FETCH_HEAD

將本地代碼強制更新到剛拉下來的遠程分支狀態

git reset --hard origin/dev

將分支提交線整理成一條線(沒什麼實戰意義)

git rebase

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章