2012-08-24 98 views
1

Master HEAD有一些變化,我試圖將我當前的本地變更與頭部合併。
假設我有衝突的變化。 git只是拒絕pull將當前分支合併到HEAD

它說我有衝突的更改,所以在這種情況下,我希望它告訴我,有衝突的文件,但它希望我恢復我的本地更改,然後拉

 Master 
    / \ 
    branch1 branch2 (local) 
     \ 
    Master 

當BRANCH2嘗試提交主設備的更改失敗。在這種情況下我該怎麼辦?手動將文件複製到某個位置,然後使用winmerge合併文件?還是有更好的方法來合併?

當我做一個git pull時,它聲明 - 本地更改將被覆蓋,因此在提取之前隱藏或提交更改。

當我I stashcommit更改,然後pullstash pop失敗,說明工作副本中的更改將被覆蓋。

順便說一句,我從來沒有在任何一種情況下都看到有衝突的文件,即使我嘗試了變形。

+0

無論你做什麼,都不要僅僅手動複製文件;你會失去你的歷史! – WhyNotHugo

+0

我沒有看到'git merge';你嘗試過使用它嗎?我建議你也先閱讀:http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging – WhyNotHugo

+0

向我們展示失敗的'git pull'命令的完整輸出 – Gareth

回答

0

看起來像使用GIT的最佳方式是有分支機構。

分支1
GIT提交
GIT PUSH
GIT MERGE主(以提取新的變化)

分支2
GIT提交
GIT PUSH


GIT合併分支1
GIT合併分支2

我不認爲有任何其他方式。如果我錯了,請糾正我?

這是正確的,如果是的話,在這種情況下使用分支機構是光滑的!

2

此問題的答案在文檔中以普通視圖隱藏。從git help merge


如何解決衝突

看到衝突後,你可以做兩件事情:

  • 決定不合並。您需要的唯一清理操作是將索引文件重置爲HEAD提交以反轉2.並清除由2和3製作的工作樹更改 。 git merge --abort可用於此。

  • 解決衝突。 Git將標記工作樹中的衝突。將這些文件編輯爲索引,並將其轉換爲索引。使用git commit來密封 這筆交易。

您可以通過使用一些工具衝突工作:

  • 使用合併工具。 git mergetool來啓動一個圖形化的合併工具,它可以幫助你完成合並。

  • 看看差異。 git diff將顯示三向差異,突出顯示HEAD和MERGE_HEAD版本的變化。

  • 看看每個分支的差異。 git log --merge -p <path>將首先顯示HEAD版本和MERGE_HEAD版本的差異。

  • 看看原件。 git show :1:filename顯示共同的祖先,git show :2:filename顯示HEAD版本,git show :3:filename顯示 MERGE_HEAD版本。

+0

我沒有看到標記的衝突。這就是我想看到的。相反,GIT PULL剛剛出來。這是否意味着GIT合併是必需的? –

+0

標記的衝突在衝突的文件中。編輯問題幷包含失敗的'git pull'命令的輸出 – Gareth

+0

另外,請參閱'git status'來查看您的工作副本和索引的狀態,以及索引 – Gareth

相關問題