2015-06-30 26 views
2

我必須在存儲庫之間進行合併。我與一些人在項目A.工作從一些特定的提交合並兩個git存儲庫

一旦我們完成項目A,我們開始這個項目B.

B項目具有項目A作爲基礎,所以我們克隆了一個刪除的文件的git,並開始與這個工作文件(我不知道爲什麼我們這樣做有很多更好的方法來做到這一點)

所以現在我有項目A的所有提交和項目B與初始承諾,其中包括整個A和我們在B工作的那些B

有沒有可能將提交從存儲庫B移動到存儲庫A? (不包括第一個是項目A)

+0

這聽起來像你正在尋找[rebase](http://git-scm.com/docs/git-rebase)。 – Oldskool

回答

2

代表答:

a1 --- a2 

代表B:

b1 --- b2 

這裏的問題是,A2和B1,雖然他們有相同的內容,因爲他們有不同的祖先,所以不是同一個提交。

這裏是我做的一個非常簡單的例子,它從另一個回購中獲取分支。 git創建了一種超然的分支點的分支:

mkdir a 
cd a 
echo "a1" > asdf.txt 
git init 
git add asdf.txt 
git commit -m"a1" 
echo asdf2 >> asdf.txt 
git commit -am"a2" 
cd .. 
cp -a a b 
cd b 
rm -rf .git 
git init 
git add asdf.txt 
echo b1 >> asdf.txt 
git commit -am"b1" 
echo b2 >> asdf.txt 
git commit -am"b2" 
git log --graph --all --oneline --decorate 
cd ../a 
git log --graph --all --oneline --decorate 
git fetch ../b master:b_branch 
git log --graph --all --oneline --decorate 

結果:

* 4de3a97 (b_branch) b2 
* 34c116e b1 
* 4b25afe (HEAD, master) a2 
* 7ac42e8 a1 

它不會在git log --graph顯示,但如果你在這一點上與gitk --all形象化的回購,你會看到歷史被斷開。

從那裏,你可以變基的b_branchmaster

git checkout b_branch 
git rebase master 

有可能到頭來你會得到的衝突最早提交的b_branch(不在master),但在那之後,你應該好。手動解決衝突,git add有問題的文件,然後git rebase --continue

+0

它的工作。謝謝! – Alan