我对git中的所有合并/ rebase战争有点混淆。
假设我为我的功能结帐新分支。我犯了几次。但后来有人将一些变化推向掌握,我希望改变我目前的工作。我希望将所有新更改提交到我的分支机构,并让我的提交在这些新更改之上重播。
如果不重写服务器上已有内容的历史记录,我应该怎样做才能让我的本地更改重播?
答案 0 :(得分:3)
这一切都取决于你的新分支是否也被推到遥控器。
如果不是,您可以在分支上执行git rebase master
。这会将所有提交保留在分支上,应用master中的新提交,然后尝试逐个应用提交。如果您的提交导致冲突,git将使您修复提交,以便更改有意义。 (如果您更改了之前提交中已更改的行并且git不确定您确实打算发生什么,则会发生这种情况。)
如果您的分支在遥控器上,那么执行git rebase
并不是一个好主意。您将更改分支的历史记录,任何拉动分支的人都将难以获得新的提交。在这种情况下,最好只执行git merge master
,以避免更改遥控器上的历史记录。
http://www.git-scm.com/book/en/Git-Branching-Rebasing#The-Perils-of-Rebasing
答案 1 :(得分:1)
正如Schleis所说,只要您没有将功能分支推送到远程存储库,您就可以执行git rebase master
。
以下是我将使用的步骤:
git checkout master
git pull
git checkout featureBranch
git rebase master
这将切换到主分支,然后为master提取所有最新提交。然后切换回您的功能分支并重播该功能,将它们提交给master。