2015-09-25 130 views
1

我正在使用git 1.7.1與my_branch_1合作,並且我正在嘗試從master進行rebase。我在directory_1中對自己進行了一些更改。Git rebase - 如何接受所​​有合併衝突的遠程分支?

當我嘗試:

git rebase master 

從我的分支,我從文件中獲取大量的合併衝突(超過200)directory_2。這些衝突如何到達那裏,我不知道。我也無法知道這些衝突應該如何糾正,因爲他們都在我從來沒有打開過,也不知道任何有關的文件。理想情況下,我希望能夠告訴git:「嘿,git - 如果你在directory_2中遇到了合併衝突,只需從master下載文件,不要問我是否修復它」。

在這一點上,我甚至可以接受所有合併衝突的主人,因爲我的大部分工作都是使用新文件。我如何通過使用來自master的文件自動告訴git重新定位並解決所有衝突?

+0

Kdiff3是一個非常方便的工具。支持選擇性目錄合併,但不支持手動操作。但是,如果你不知道他們,爲什麼不在合併之前合併? – user2864740

回答

1

你可以做的是做一個git merge master。這會產生合併衝突。然後你可以用一個小小的魔法來完成剩下的git diff --name-only --diff-filter=U。該命令將列出所有衝突的文件。所以,你可以這樣做

$ git merge master 
$ git diff --name-only --diff-filter=U | grep ^path/to/directory_2 | xargs -I% sh -c 'git checkout -f HEAD -- % && git add %' 

然後你就可以完成合並

或者你也可以做其他的方式

$ git diff --name-only --diff-filter=U | grep ^path/to/directory_2 | xargs -I sh -c 'git checkout -f master -- % && git add %' 

首先做ours上的目錄directory_2,第二呢目錄directory_2上的theirs

這是什麼腳本做的就是讓所有未解決的衝突,grep過濾器,以便只在directory_2的那些是在列表中,然後使用xargs運行命令git checkout -f <branch: Either HEAD or master> -- <file> && git add <file>列表中的每個文件。

+0

這大多解決了這個問題。合併和添加選定的文件後,我仍然有一些rebase錯誤。這些解決方法是檢查master中生成的文件,然後運行git rebase --skip。 – tspang

+0

如果我在Mac OS X上運行第二個命令,則會得到'xargs:非法選項-c'。我如何防止此錯誤? – NobleUplift

+0

如果我運行第一個,我會遇到致命的:pathspec'%'與任何文件都不匹配。 – NobleUplift