1. 配置
1.1 設定全域性使用者名稱和郵箱
git config --global user.name xxx
git config --global user.email xxx@xxx.com
上述命令是設定全域性使用者名稱和郵箱,設定完成後,所有git倉庫的使用者名稱和郵箱都是一樣的。
建議:
在公司電腦中,建議將使用者名稱設定為姓名全拼音或者域賬號,建議將郵箱設定為公司郵箱,方便團隊成員快速識別。
1.2 設定某個git倉庫的使用者名稱和郵箱
如果你是某個開源專案的貢獻者,每次提交程式碼時肯定希望顯示的是自己的暱稱和個人郵箱,而不是全域性設定裡的域賬號和公司郵箱,此時則可以單獨對這個git倉庫設定使用者名稱和郵箱。
首先,切換到目標git倉庫的根目錄,開啟終端視窗,執行如下命令:
git config user.name xxx
git config user.email xxx@163.com
執行完命令後,檢視.git資料夾下的config檔案,會看到底部增加了剛剛配置的使用者名稱和郵箱。
注意事項:上述命令僅對當前git倉庫生效,不影響全域性配置。
1.3 檢視使用者名稱和郵箱
git config user.name
git config user.email
1)如果是在某個git倉庫下執行上述命令,並且當前git倉庫單獨設定過使用者名稱和郵箱,返回的是當前git倉庫的使用者名稱和郵箱,否則,返回的是全域性的使用者名稱和郵箱。
2)如果不是在某個git倉庫下執行上述命令,返回的是全域性的使用者名稱和郵箱。
1.4 檢視全部配置
git config --list
1)如果是在某個git倉庫下執行上述命令,返回的是全域性配置+當前專案的配置。
2)如果不是在某個git倉庫下執行上述命令,返回的是全域性配置。
2. 拉取程式碼
2.1 git clone
如果要將遠端git倉庫的程式碼克隆到本地,可以使用git clone
命令,如下所示:
git clone https://github.com/mybatis/mybatis-3.git
命令執行完成後,會自動建立一個名為mybatis-3的資料夾。
如果你想自定義生成資料夾的名字,可以進行指定,如下所示:
git clone https://github.com/mybatis/mybatis-3.git mybatis
命令執行完成後,會發現自動建立了一個名為mybatis的資料夾,而不是mybatis-3。
2.2 git pull
如果團隊成員有提交程式碼,想要拉取最新程式碼到本地,可以使用git pull
命令,如下所示:
git pull
3. 分支
3.1 檢視本地分支
git branch
前面帶*並高亮顯示的代表當前分支。
3.2 檢視遠端分支
git branch -r
3.3 檢視所有分支
所有分支包含本地和遠端的分支
git branch -a
3.4 建立分支
1)建立本地分支(基於本地分支建立)
git branch fix_0609_npe
該命令是基於當前分支建立(一般是基於master分支並保證程式碼最新),並且建立成功後仍然停留在當前分支,不會跳轉到新建的分支。
2)建立本地分支(基於遠端分支建立)
git checkout -b fix_0609_npe origin/master
以上命令會基於遠端master分支建立本地分支fix_0609_npe,並切換到分支fix_0609_npe。
特別注意:此時本地分支fix_0609_npe關聯的遠端分支是master。
3)建立遠端分支
git push origin fix_0609_npe:fix_0609_npe
以上命令會建立一個名為fix_0609_npe的遠端分支。
4)本地分支與遠端分支建立關聯
git branch --set-upstream-to=origin/fix_0609_npe fix_0609_npe
以上命令會將本地分支fix_0609_npe與遠端分支fix_0609_npe建立關聯。
可以通過git branch -vv
命令來檢視本地分支與遠端分支的關聯關係:
git branch -vv
3.5 切換分支
切換分支可以使用git checkout
命令。
1)切換到已存在的分支
git checkout test
2)切換到不存在的分支(基於本地當前分支自動建立)
git checkout -b fix_0609_npe
以上命令會基於當前分支建立新分支fix_0609_npe,並切換到該分支。
3)切換到不存在的分支(基於指定遠端分支自動建立)
git checkout -b fix_0609_npe origin/fix_0609_npe
4)切換到上一個分支
git checkout -
3.6 刪除分支
刪除分支時需要先切換到其它分支,否則分支無法刪除
git branch -d fix_0609_npe
如果某些分支無法正常刪除,可以強制刪除:
git branch -D fix_0609_npe
刪除遠端分支:
git push origin --delete fix_0609_npe
4. 提交修改
提交前,可以通過git status
檢視下檔案修改狀態:
git status
然後使用git add
命令將檔案新增到暫存區:
git add .
然後使用git commit命令提交檔案:
git commit -m "code optimize"
以上2個命令可以通過下面一行命令來實現:
git commit -am "code optimize"
最後執行git push命令將本地commit推送到遠端分支:
git push
5. 版本回退
如果程式碼commit之後,想撤銷,可以使用git reset
命令,如下所示:
git reset --soft HEAD^
以上命令撤銷後,會保留修改的內容。
如果確認不需要保留修改的內容,可以將soft換位hard,如下所示:
git reset --hard HEAD^
說明:
HEAD^表示上一個版本,即上一次commit,等價於HEAD~1,
如果想撤銷最近2次的commit,可以使用HEAD~2。
也可以回退到指定的commit_id(可通過git log
命令檢視commit_id),如下所示:
git reset --hard e094633609aeebd664126dfc48b602157b2dabbc
說明:commit_id為e094633609aeebd664126dfc48b602157b2dabbc的內容修改還存在
如果遠端分支也要回退,需要執行以下命令:
git push --force
6. 暫存
經常遇到某個需求開發了一部分程式碼,然後被打斷去處理線上bug,此時就需要先將本地的修改暫存起來,待線上bug處理後,再將本地
的修改還原,git stash
命令可以完美解決這種場景。
6.1 暫存修改
可以使用如下命令,將本地的修改暫存起來:
git stash
但推薦暫存時新增清晰的備註,方便區分,如下所示:
git stash save "code optimize"
6.2 檢視暫存列表
git stash list
6.3 應用某個暫存
git stash apply
預設使用第一個暫存,等價於下面這樣的寫法:
git stash apply stash@{0}
如果想使用其它暫存,可以指定順序,比如第2個,就是stash@{1},依次類推:
git stash apply stash@{1}
說明:該命令不會將對應的暫存從暫存列表中刪除
6.4 應用並刪除某個暫存
git stash pop
預設使用第一個暫存,等價於下面這樣的寫法:
git stash pop stash@{0}
如果想使用其它暫存,可以指定順序,比如第2個,就是stash@{1},依次類推:
git stash pop stash@{1}
說明:該命令會將對應的暫存從暫存列表中刪除
6.5 刪除暫存
git stash drop
預設刪除第一個暫存,等價於下面這樣的寫法:
git stash drop stash@{0}
如果想刪除其它暫存,可以指定順序,比如第2個,就是stash@{1},依次類推:
git stash drop stash@{1}
如果想刪除所有的暫存,可以執行以下命令:
git stash clear
7. 合併所有改動
合併程式碼的場景有很多,比如將master分支合併到自己的開發分支,將開發分支合併到公共分支test、uat。
git merge master
以上命令代表將本地master分支的程式碼合併到當前分支。
git merge origin/master
以上命令代表將遠端master分支的程式碼合併到當前分支。
8. 合併部分改動
因為git merge
命令合併的是所有改動,發生衝突的機率是很高的,解決衝突非常耗時且容易出錯,所以在某些場景下,可以只合並部分改動,此時可以使用git cherry-pick
命令。
以下命令,是將commit id為aa6b6922fc19173c090c64a4c1d399265e4f0500的提交合併到當前分支:
git cherry-pick aa6b6922fc19173c090c64a4c1d399265e4f0500
也可以指定多個commit id:
git cherry-pick 12eef219da5d7f45892142ddeb107f496177274d aa6b6922fc19173c090c64a4c1d399265e4f0500
9. 特別注意
9.1 強制覆蓋原生程式碼與遠端倉庫保持一致
如果發現遠端master分支被汙染後,應儘快將遠端master分支還原,然後執行如下命令覆蓋掉本地分支程式碼,與遠端master分支保持一致:
git reset --hard origin/master
或者將本地master分支刪除,重新基於遠端master分支拉取:
git branch -d master
git checkout -b master origin/master
9.2 切換分支會把未提交的檔案帶到其它分支
假如在test分支修改了檔案A,未提交,然後此時切換到uat分支時,如果沒有衝突,檔案A的修改會被帶到uat分支,如果不注意的話,就容易被提交,釋出到線上,造成bug。
避免措施:
- 切換分支時,檢查下本地檔案狀態,儘量不要有未提交的檔案,可以stash或者commit
- 提交程式碼前,儘量比對下修改內容,避免誤提交
10. 其它
10.1 清空命令列
git clear
10.2 檢視git 版本號
git version
10.3 IDEA Annotate 顯示設定
IDEA預設顯示的是Last Name,可以調整為顯示Full Name,否則看到的可能是Zhang這樣的,無法快速識別到是哪個人:
10.4 拉取或者合併程式碼提示需要輸入commit message
Please enter a commit message to explain why this merge is necessary
解決方案:
1)按下esc鍵
2)輸入:wq
3)按下Enter鍵