我想合併兩個分支。假設我有三個文件A,B和C. 在分支主文件中,我有三個文件A,B和C.並且在分支'新'中我有A和C,並且我刪除了B。另外C和A不同於C和A在'主'中。爲什麼git不問如何合併一些文件?
現在我正在將'master'和'new'合併在一起,而git所做的是將'C'的'master'版本替換爲'new'版本的C,它保留了B(我實際上想要刪除)要求我手動合併A.發生了什麼事? 我以爲它會問我所有的變化!
但是!如果我比較兩個分支,它會正確顯示所有的差異。
我想合併兩個分支。假設我有三個文件A,B和C. 在分支主文件中,我有三個文件A,B和C.並且在分支'新'中我有A和C,並且我刪除了B。另外C和A不同於C和A在'主'中。爲什麼git不問如何合併一些文件?
現在我正在將'master'和'new'合併在一起,而git所做的是將'C'的'master'版本替換爲'new'版本的C,它保留了B(我實際上想要刪除)要求我手動合併A.發生了什麼事? 我以爲它會問我所有的變化!
但是!如果我比較兩個分支,它會正確顯示所有的差異。
Git正在按照您所說的要求工作。
比方說,我有他們的每個內容A
B
和C
文件。您可以測試行爲以下命令:
git init
git add A B C
git commit -m "Initial commit"
然後創建分支
git checkout -b branch1
<edit A, edit C>
git rm B
git add A C
git commit -m "branch commit 1"
然後執行從BRANCH1合併掌握
git checkout master
git merge branch1
在這種情況下,git會快轉發您的更改:
Fast-forward
A | 4 ++--
B | 5 -----
C | 6 +++---
3 files changed, 5 insertions(+), 10 deletions(-)
delete mode 100644 B
如果您在master
和branch1
中進行了更改,則會出現衝突。
從註釋擴展情況:
你有文件,其中包含AAAAAA
在第一行,B
A
與BBBBBBB
和C
與CCCCCC
。
git init
git add A B C
git commit -m "Initial commit"
分支到branch1
git checkout -b branch1
與DDDDD
更換的A
第一線的C
git rm B
git add A C
git commit -m "branch commit 1"
回到第二行添加到DDDDD
master
git checkout master
替換的A
與EEEEEE
(從而製備衝突)的第一行 一個CCCCC
行添加到B
git add A B
git commit -m "master commit 1"
現在我們執行合併
混帳合併BRANCH1
CONFLICT (modify/delete): B deleted in branch1 and modified in HEAD. Version HEAD of B left in tree.
Auto-merging A
CONFLICT (content): Merge conflict in A
Automatic merge failed; fix conflicts and then commit the result.
B
仍然存在。 所以基本上現在你必須決定做什麼,現在
git add B # Keeping B
git rm B # Trashing B
你需要通過編輯它來解決衝突A
。然後
git add A
爲階段它提交。
如果git status
你會看到C
已被修改(因爲它的目的是與版本控制端起你branch1
所做的更改!),但你有機會使用恢復文件到主版本:
git checkout HEAD C
這種行爲可以爲其他合併完成時,沒有衝突,但你必須強制進行手動與git merge --no-commit <branch>
提交它不是一個真正的答案,但我不能評論你的問題......我將編輯這篇文章關於你的回答
您應該提供該命令的結果:git status
我假設你是在合併的中間,所以你必須解決衝突(選擇,如果你想保留B和手動合併A)
關於分支new_graph_lib 您的分支與「origin/new_graph_lib」保持同步。要致力於 的變化: (使用 「git的重置頭
是啊...我的第一個問題就是爲什麼在我的情況下它並沒有刪除合併中的B?第二個問題是我如何保留'主'版'C'? – user1685095 2014-10-28 09:05:57
已添加擴展用例。希望能幫助到你。 – 2014-10-28 09:27:18
好吧,它有幫助。但是如果我不想手動刪除B(而且實際上它是很多文件),而且我不能創建衝突,因爲在A的「新」版本中根本沒有共同的行。我只是從文件中刪除任何東西,並從頭開始。 – user1685095 2014-10-28 12:39:19