多數(shù)情況下缤骨,git 團(tuán)隊(duì)開發(fā)出現(xiàn)的沖突尺借,是因?yàn)楸镜匕姹咎?hào)低于服務(wù)器的版本號(hào),注意:
1虱歪,盡量在修改文件之前栅表,git chekout更新一下;
2谨读,如果修改公共文件劳殖,需要跟同事做好溝通,讓他別修改哆姻,在你修改后玫膀,讓他更新。
一些小技巧:
1.首先在本地 git clone 回來之后箕昭,只有一個(gè)默認(rèn)分支master,不要直接在上面工作落竹。
a.建立一個(gè)自己的分支货抄,如取名working: git branch working
b.切換到這個(gè)新分支: git checkout working
c.現(xiàn)在可以自由修改代碼并保存了朱转。
2.確保你修改的代碼都是自己負(fù)責(zé)項(xiàng)目下积暖,或者說你的兩次提交之間,沒有其他人來改相同項(xiàng)目下的代碼缅疟,如果不能避免性誉,你就要在下面的merge步驟手工處理沖突了。
3.提交代碼時(shí)按下面的步驟:(可以將下面的腳本保存在你的每個(gè)項(xiàng)目之下错览,每次只修改提交一個(gè)項(xiàng)目)
git checkout working? ? --force? #確保使用的是工作分支
git add .
git commit -m"$1" -a? ? #提交代碼到本地,工作分支增加一個(gè)版本轧邪,這里的$1是運(yùn)行腳本的第一個(gè)參數(shù)
git checkout master
git pull origin master? #切換回默認(rèn)分支羞海,并將默認(rèn)分支和中央最新版本合并
git merge working? ? ? ? #在本地合并你的這次修改到默認(rèn)分支
git push origin master? #提交到中央版本庫,接下來還是要切換回工作分支的
git checkout working? --force
如果不小心動(dòng)了生產(chǎn)環(huán)境(就是只從中央版本庫pull到本地)的文件硕糊,只好將本地版本退回一個(gè),再從中央代碼庫pull代碼合并简十。
git reset --hard HEAD
常見的bug及解決方式:
1,如果系統(tǒng)中有一些配置文件在服務(wù)器上做了配置修改,然后后續(xù)開發(fā)又新添加一些配置項(xiàng)的時(shí)候, 在發(fā)布這個(gè)配置文件的時(shí)候,會(huì)發(fā)生代碼沖突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生產(chǎn)服務(wù)器上所做的改動(dòng),僅僅并入新配置項(xiàng), 處理方法如下:
$ git stash
$ git pull
$ git stash pop
然后可以使用git diff -w +文件名 來確認(rèn)代碼自動(dòng)合并的情況.
反過來,如果希望用代碼庫中的文件完全覆蓋本地工作版本. 方法如下:
$ git reset --hard
$ git pull
其中g(shù)it reset是針對版本,如果想針對文件回退本地修改,使用
$ git checkout HEAD file/to/restore
2,在 checkout 或者 rebase 時(shí), 如果提示:
Please move or remove them before you can switch branches.
Aborting
$ git clean -d -fx
3,有時(shí) push 代碼的時(shí)候, 出現(xiàn)提示:
$ git push
To ../remote/
! [rejected]? ? ? ? master -> master (non-fast-forward)
error: failed to push some refs to '../remote/'
問題 (Non-fast-forward) 的出現(xiàn)原因在于: git remote 倉庫中已經(jīng)有一部分代碼, 所以它不允許你直接把你的代碼覆蓋上去. 于是你有 2 個(gè)選擇方式:
強(qiáng)推, 即利用強(qiáng)覆蓋方式用你本地的代碼替代 git 倉庫內(nèi)的內(nèi)容
$ git push -f
或者先把 git 的東西 fetch 到你本地然后 merge 后再 push
$ git fetch
$ git merge