2012-07-06 147 views
2

我在git的常規一向很簡單,我沒有得到任何衝突,沒有我的許可,它強制更新我的本地副本。沿着這些線:'2個文件改變,2個插入(+),6個刪除( - )'。但就我而言,衝突不應該從簡單的合併中解決,而應該從我這邊要求手動解決衝突。爲什麼git不讓我去做手動衝突解決?提前致謝! 注意:我的git命令都沒有強制選項-fGit是沒有顯示任何衝突,並覆蓋我的本地副本

+2

'git'沒有這樣做(以我的經驗),所以你可能會忘記一些看似情況的信息。也許你有一個錯誤的石器時代版本的'git'? 'git --version'告訴你什麼? – bitmask 2012-07-06 19:56:41

+0

嘗試'git fetch'然後'git merge'(查找命令行)。默認情況下'git pull'會自動嘗試「衝突」解決方案,並且根據我的經驗,如果算法放棄了衝突,則不會這樣做。 – Robert 2012-07-06 20:06:50

+0

@Robert:但是這與'git pull'沒有什麼不同? – 2012-07-06 22:33:19

回答

5

git pull沒有參數或多或少相當於git fetch && git merge origin/<upstream_branch>。通過使用pull而不是fetchmerge,您允許git嘗試合併到您的本地分支。如果合併發生時沒有衝突,那麼您的本地將顯示「強制更新」,因爲它能夠在您的干預下理清遠程文件版本與您自己的文件之間的差異。

調試發生了什麼是那種很難沒有看到你的代碼,但試試這個:

git fetch ;# fetch the remote changes 
git diff HEAD origin/<branch> ;# diff your local branch with the remote's copy of <branch> 

輸出從git diff應該線索你到發生了什麼。如果您想更進一步,請嘗試git merge --no-commit origin/<branch>,然後發出git diff --cached。這會告訴你到底git自動合併了哪些更改,並且應該允許你確定什麼是什麼。

0

如果git設法解決git pull期間的所有衝突,那麼它將進行提交。這並不意味着它一定是正確的。正如你已經注意到的,根據你的變化,你可能需要做一些手動修復。

要做到這一點,請在拉出後在工作樹中進行更正,然後對其進行分級(例如,使用git add -u),並使用git commit --amend修改合併提交。

這將創建一個新的合併提交,它會替換git用包含更正的git所做的合併提交。

然後,您可以像往常一樣推送結果。