2014-10-28 48 views
0

我想合併兩個分支。假設我有三個文件A,B和C. 在分支主文件中,我有三個文件A,B和C.並且在分支'新'中我有A和C,並且我刪除了B。另外C和A不同於C和A在'主'中。爲什麼git不問如何合併一些文件?

現在我正在將'master'和'new'合併在一起,而git所做的是將'C'的'master'版本替換爲'new'版本的C,它保留了B(我實際上想要刪除)要求我手動合併A.發生了什麼事? 我以爲它會問我所有的變化!

但是!如果我比較兩個分支,它會正確顯示所有的差異。

回答

0

Git正在按照您所說的要求工作。

比方說,我有他們的每個內容ABC文件。您可以測試行爲以下命令:

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 

如果您在masterbranch1中進行了更改,則會出現衝突。


從註釋擴展情況:

你有文件,其中包含AAAAAA在第一行,BABBBBBBBCCCCCCC

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" 

回到第二行添加到DDDDDmaster

git checkout master 

替換的AEEEEEE(從而製備衝突)的第一行 一個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>

+0

是啊...我的第一個問題就是爲什麼在我的情況下它並沒有刪除合併中的B?第二個問題是我如何保留'主'版'C'? – user1685095 2014-10-28 09:05:57

+0

已添加擴展用例。希望能幫助到你。 – 2014-10-28 09:27:18

+0

好吧,它有幫助。但是如果我不想手動刪除B(而且實際上它是很多文件),而且我不能創建衝突,因爲在A的「新」版本中根本沒有共同的行。我只是從文件中刪除任何東西,並從頭開始。 – user1685095 2014-10-28 12:39:19

0

提交它不是一個真正的答案,但我不能評論你的問題......我將編輯這篇文章關於你的回答

您應該提供該命令的結果:git status

我假設你是在合併的中間,所以你必須解決衝突(選擇,如果你想保留B和手動合併A)

+0

關於分支new_graph_lib 您的分支與「origin/new_graph_lib」保持同步。要致力於 的變化: (使用 「git的重置頭 ...」 來unstage) \t新文件:.idea /詞典/ michael.xml \t新文件:.idea /示波器/ scope_settings.xml 未追蹤的文件: (使用「git add ...」包含將承諾的內容) \t .idea/workspace.xml – user1685095 2014-10-28 12:36:53