我有四个分支(master, b1, b2和b3)。我在b1-b3上工作后,我意识到我在分支主上有一些应该在所有其他分支中更改的东西。我改变了我在master中需要的东西…这是我的问题:

我如何用主分支代码更新所有其他分支?


当前回答

令人惊讶的是,我最常用的方法没有被提及。这在基于Trunk的开发风格中是很常见的,其中main不断更新,并且从它的分支中工作。

假设main已经有了更新的代码,并且你在分支b1中。如果不是这种情况,您将需要git fetch。

因此,要用main中所做的更改更新b1,只需使用

git pull origin main

当您或其他人到达其他分支并想要更新时,也必须在其他分支中进行相同的操作。

其他回答

如果你一直在一个分支上断断续续地工作,或者在你工作的时候其他分支发生了很多事情,最好将你的分支重新建立在master上。这样可以保持历史的整洁,使事情更容易理解。

git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed

注:

不要改变你与他人合作的分支。 您应该基于将要合并到的分支,该分支可能并不总是主分支。

http://git-scm.com/book/ch3-6.html上有一章是关于改变基础的,网上还有很多其他的资源。

有两种方法

您希望将主分支合并到您的分支中 - git checkout master - git拉 - git checkout your-feature-branch - git merge master //解决冲突并提交 - git push

2:如果你想在main的基础上重新调整你的改变。

 git checkout master #Switch to main branch
 git pull #Take latest
 git checkout your-feature-branch #Switch to story branch
 git pull --ff-only # Ensure branch is up to date
 git rebase -i origin master #Interactively rebase your commits on top of master. So your changes are on top of latest commits in main.
 git rebase --continue #Resolve conflicts and rebase --continue to continue with next commits
 git push -f origin your-feature-branch # As you have rewritten the commit history, you have to **force push** the commits

@cmaster给出了最好的详细回答。简而言之:

git checkout master #
git pull # update local master from remote master
git checkout <your_branch>
git merge master # solve merge conflicts if you have`

您不应该重写分支历史记录,而应该保持它们的实际状态以供将来引用。当合并到master时,它会创建一个额外的提交,但这很便宜。提交不需要成本。

如果你想要恢复到上一次提交并删除日志历史记录

使用下面的命令,让我们假设你想要去到以前的提交,它有commititid SHA - 71e2e57458bde883a37b332035f784c6653ec509,你可以指向这个提交,它将不会显示任何日志消息在这个提交之后,所有的历史将被擦除。

git push origin +71e2e57458bde883a37b332035f784c6653ec509^:master

对于这个问题有两种选择。

1) Git 变基

2)去合并

只有与上述两者不同的合并情况下,将有额外的历史提交

1) git结帐分支(b1,b2,b3)

2) git rebase origin/master(如果冲突可以通过git rebase -continue在本地解决)

3)去推

或者,git合并选项是类似的方式

1) git checkout“your_branch”(b1,b2,b3)

2)转到合并母版

3)去推