使用Git管理專案 使用總結

weixin_34249678發表於2017-07-11

此文作為在工作工使用git的一篇筆記防止遺忘。長期更新,如果有錯誤,請指正,不勝感激。

工欲善其事必先利其器,我同時使用的git命令列和GUI的方式使用git,原因是:命令列在多分支檢視與多檔案提交時,比對效率不如gui工具高;但是GUI的功能上不如命令列強大,某些操作速度上不如命令列快。
我處理命令列git外,用的GUI工具主要有兩個,一個是jetbrains家族軟體的idea自帶的git外掛,一個是GitKraken(介面比較華麗,專業版收費,個人使用免費版本就行)

系列文章:
1、《git入門教程》http://www.jianshu.com/p/d22d1a517f93

安裝好git後的的第一步(如果不設定後面不允許提交):

git config --global user.email "bsqql123@163.com"
git config --global user.name "ice blue"

1、基礎命令

由於是基礎命令,就不進行介紹了,很多文章都介紹的比較詳細。

git config --list 檢視當前的配置
git add .
git commit -m "init" # init 為你的提交資訊,可以任意填寫,但是團隊開發時建議制定規範,並按規範填寫。

2 、快捷命令

對於已經加入快取區中的檔案,可以使用git commit -am ""# 省去了git add .這一步操作。
從快取區移除 ,檔案。
git rm --cache <file>

展示所有被追蹤的檔案
git ls-files -t

git push origin

上面命令表示,將當前分支推送到origin主機的對應分支。如果當前分支只有一個追蹤分支,那麼主機名都可以省略。如下:

git push

git branch --set-upstream my_branch origin/my_branch 這條命名設定遠端追蹤。

常用的alias:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
git config --global alias.co checkout
git config --global alias.st status

git rebase -i

git checkout -b name-of-new-branch 169d2dc

檢視全域性的配置(包括alias):
git config --global --list

3、分支管理

分支管理是git比較有特色的地方。

下面介紹一些常用的git 分支操作命令。

1)建立分支

git branch mystudygit1.0

建立分支並且切換到分支
git branch -b mystudygit1.0
建立指定版本的分支,並且切換到此分支(-b表示切換的意思)
git checkout -b name-of-new-branch 169d2dc

git checkout -- file 表示將已經加入 快取區的檔案的改動刪除,用的比較少,具體參考如下連結:
http://www.cnblogs.com/Calvino/p/5930656.html

  1. 切換分支
    git checkout mystudygit1.0

  2. 刪除分支
    git branch -d mystudygit1.0 //如果該分支沒有合併到主分支會報錯
    或者
    git branch -D mystudygit1.0 //強制刪除

刪除本地遠端分支
git branch -r -d origin/branch-name
刪除伺服器遠端分支

1、
git push origin :<branch-name>

 2 、
git push origin --delete <branchName>

3、git 推送本地分支test到遠端feature_add_querymodel

git push origin test:feature_add_querymodel

4、重新命名分支
git branch -m devel develop

git cherry <sha1> 命令

如果發生了衝突,需要手工解決衝突,
然後使用 git cherry-pick --continue 告知 git 已經解決完衝突或者
使用 git cherry-pick --abort 取消,並且回到 cherry-pick 前的狀態

要選擇多個提交,可以給git cherry-pick命令傳遞-n選項,比如:

git cherry-pick –n 321d76f
git cherry-pick –n c87fc86

此時所有的321d76f 版本會應用到當前的暫存區和工作目錄但是不會提交,head指標不會發生移動。改變
這樣在揀選了這個改動之後,進行暫存而不立即提交,接著可以進行下一個揀選操作,一旦揀選完需要的各個提交,就可以使用git commit命令 一併提交。

idea 自帶git外掛rebase,rebase操作:

2027280-8759e647e34719ae.png
image.png

點選右下角的git:xxx 即可出來彈窗。

2027280-ae0ca790aec77c6d.png
image.png

如果出現衝突的換會出現類似彈窗。

2027280-294f09a8d3ab8ca5.png
image.png

雙擊檔名稱即可進行手工解決衝突,idea非常人性化的對比檔案

2027280-a62de8b2edff1443.png
image.png

點選圖中箭頭即可accept程式碼。
中間為合併的版本,最右邊為遠端版本,圖中也顯示了出來。具體可以操作一下試試。

2027280-142dfb3b1568f09e.png
image.png

apply all non-confliction changes 這個功能也是十分的好用。

當然可以手工操作,不過覺得介面操作更為快捷,解決衝突更易。

參考文件:https://git-scm.com/docs/git-cherry-pick

4、git規範

rebase準則:

“No one shall rebase a shared branch” — Everyone about rebase
mingl
翻譯一下就是:
不要在公共分支上rebase,因為會使分支變得混亂。

具體參見:
https://github.com/wxyyxc1992/Coder-Essentials/blob/master/VersionControl/Git/Branch/Rebase/git-rebase-and-the-gloden-rule-explained.md

5、開發流程

在工作中,用git管理專案需要走一下流程。

1、Release分支: 穩定分支,由master leader 負責merge。用於生產環境的部署。

2、Master分支: 開發分支。定期 merge 到 release 分支。

3、Pre分支:預生產分支,測試通過後,可以申請merge到master分支。Pre 分支用於 Preview 環境的部署。

4、Feature 分支:開發分支。開發完後 cherry-pick 到 staging 分支進行測試,測試通過後 cherry-pick 到 Pre 分支進行 Preview 環境的測試。feature 分支名以 feature_ 開頭,後面跟簡短的英文說明。比如,某次修改為了新增測試,可將分支名命名為 feature_add_unit_tests 。

git config --global user.email "bsqql123@163.com"
git config --global user.name "ice blue"

git reflog 可以檢視歷史操作命令,非常好用。

2027280-e54a6d139961df1d.png
image.png

git reset --soft sha-id 即可返回到指定操作前。

pull request 的操作步驟,首先完成提交後,一定要記得rebase 公共分支程式碼,
比如我在
dev分支checkout的feature分支,commit後,pull request前記得rebase dev分支的程式碼。

當 pull request後,別人稽核你的程式碼不通過,這時你要重新修改,可以使用

git add <file> #一定要先把檔案放到暫存區
然後使用
git commit --amend
這個命令,只能修改最後一次提交,如果想修改前幾次的提交,請使用reset。

操作步驟

git fetch
git rebase -i dev

或者使用更為簡潔的命令:

git pull --rebase devx

常見問題:

! [rejected] dev -> dev (non-fast-forward)
一般出現這個問題是由於本地遠端分支和服務遠端分支不同步造成的,
有兩種解決辦法:
1、強制推送到遠端
2、先fetch 後merger,或者直接git pull

相關文章