2012-10-26 44 views
2

在我的公司我們最近搬了git。在這個環境中工作的過程中,我最終做了一堆本地提交(在我的本地分支)。爲了保持我的代碼更新,我做了拉。現在最終的結果是,當我做一個git日誌時,我發現我的提交以及其他開發人員在該日誌中的提交。在將我的提交推送到遠程之前,我想收集所有本地提交併將它們合併爲一個提交(以減少日誌中的噪音)並將其推送到遠程。我怎麼在git中做到這一點?如何獲取一堆我的git本地提交併將它們合併爲一個提交?

回答

1
git fetch <remote name> 
git rebase -i <remote name>/<branch name> 

有關如何使用rebase -i(交互式衍合)的詳細信息,請參閱本指南:

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

注意,重定基/擠壓並不總是發揮很好地與合併提交。在合併之後,重定位會經常移動您的提交,因此合併提交可能會消失,您不會遇到問題,但如果您合併的內容不在遠程分支中,則需要小心。

0

您應該改變方法。在本地分支上開發時,您不應該執行任何池(或提取)。而是嘗試更新「主要」開發分支,然後不時更新(git rebase)您的開發分支與「主要」分支。

現在也許git cherry-pick可能是你在找什麼。

你也可以嘗試手動重置(git reset --soft)到給定(開發)分支上的第一次提交),然後只選擇下一次提交的提交。

如果你只有你的分支問題上的提交更簡單:你可以壓扁那些(git squash)。爲了不在開發分支上創建太多的提交,一些方法也會改變你的提交(git ammend)。

+0

即使您拉入上游中間分支,Git實際上也非常聰明,只要您重新設置的內容包括您在此期間提出的任何內容。 – Amber

+0

這是真的,但在這種特殊情況下,一切都取決於從哪些分支提交的內容以及應該合併的內容。如果兩者相同(或者兩者的提交相同,則更一般),這是正確的。如果沒有櫻桃挑選應該工作。 – codewarrior

3

要做的最簡單的事情是,一旦你完成了git pull並且你已經解決了所有衝突並且都是最新的,請將分支指針重置爲最新的遠程提交(我假設爲origin/master),然後做一個新的提交。

git reset --soft origin/master 
git commit 

新提交將作爲遠程主提交之上的一個新提交進行所有更改。然後您可以將此提交推送到遠程。在推送前使用git show驗證提交。

注:這是假設你只從一個共享分支(master)拉,或者你已經拉到任何其他共享分支機構已合併到遠程的master

+0

我喜歡它。比'git rebase -i'少一點麻煩。 – jszakmeister