2012-10-11 61 views
1

我想知道如果在分支之間擠壓並從中間的遠程推/拉,會發生什麼情況。合併分支時的git squash

DEVELOPER 1 
1. $ git checkout foo 
2. $ git commit -m 'changed file' file.txt 
    $ git commit -m 'changed another file' file2.txt 
3. $ git push 

DEVELOPER 2 
4. $ git checkout foo 
5. $ git pull // gets commits from 2. above 
6. $ git checkout bar 
7. $ git merge foo 
8. $ git rebase -i HEAD~3 

in 1 - 3 - 我對某些文件進行一些本地更改,單獨提交它們,然後按下。其他人拉我的提交,檢出另一個分支,合併第一個分支,然後嘗試壓縮合並中的提交。

這會搞砸歷史嗎?

+0

「搞砸了」 - 不知道。 「改變」 - 是的。 –

回答

1

git rebase -i HEAD~3將在bar分支重播提交(壓扁與否),留下由分公司foo原封不動引用的那些。

如果您的分支bar已被推送(請參閱「git rebase develop branch」),因爲您需要強制推送它並使bar中的其他開發人員陷入困境,這很糟糕。

但是,這也是不好的,因爲它會重複提交的內容(這些foo分支之間,而被壓扁在bar,使得任何未來的一個(或多個)從foobar合併申請再次承諾2和3 。
這就是一個底墊的選擇-p--preserve-merges)就可以派上用場,爲了保持合併的父母,但是這可能不是你想要做的(南瓜)什麼兼容。

一般來說,儘量不要修改你剛纔拉的公共歷史記錄(如分支上的提交2和)