如何在同一个Git存储库中同步两个分支?

mač*_*ček 29 git workflow git-rebase git-branch

这是我经常遇到的常见工作流障碍:

主人是我们的"稳定"分支

$ git status
# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

在分支上创建模块

$ git checkout -b foo
$ echo "hello" > world
$ git add .
$ git commit -m "init commit for foo module"
$ git checkout master
$ git merge foo
Run Code Online (Sandbox Code Playgroud)

在主人或其他分支机构工作

在接下来的几周内,将有更多代码直接由其他分支机构提交.foo分支将在这段时间内不受影响

在foo分支上恢复工作/进行更新

$ git checkout foo
Run Code Online (Sandbox Code Playgroud)

不好了!foo已经过时了!我理解为什么,但我确实需要foo重新同步.

这个问题

如何从foo分支机构获取最新内容?

Ada*_*erg 34

如果你不需要分支:

如果你已经将foo合并到master,"git branch -d foo"来杀死主题分支,然后当你需要再次破解它时将来"checkout -b foo".

如果你确实需要分支:

您可以针对主分支重新设置主题分支:

git checkout foo
git rebase master
Run Code Online (Sandbox Code Playgroud)

要么:

git rebase master foo
Run Code Online (Sandbox Code Playgroud)

  • 额外有用的花絮:`git rebase master foo`相当于`git checkout foo && git rebase master` :) (5认同)
  • 如果您已经从机器上发布了分支`foo`,这可能有害.在master上重新绑定它将改变分支中包含的提交的sha,所以当你试图推送你的'foo`的重定义版本时,它们将与服务器中的内容不匹配,它会告诉你你无法完成推动,因为它不是一个快进. (4认同)
  • giorgiosironi:没错.在提交更改后,应始终执行`git rebase`**,****之前**推送或将您的更改合并到公共分支中. (2认同)

Mau*_*rez 6

重新引用是将提交序列移动或组合到新的基本提交的过程.重新定位在功能分支工作流的上下文中最有用且易于可视化.一般过程可以看作如下:

Git Rebase视觉解释

下面的示例将git rebase与git merge相结合,以维护线性项目历史记录.这是一种快速简便的方法,可确保您的合并快速转发.

# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"
Run Code Online (Sandbox Code Playgroud)

在我们的功能中,我们意识到我们的项目存在安全漏洞

# Create a hotfix branch based off of master
git checkout -b hotfix master
# Edit files
git commit -a -m "Fix security hole"
# Merge back into master
git checkout master
git merge hotfix
git branch -d hotfix
Run Code Online (Sandbox Code Playgroud)

将修补程序合并到master后,我们有一个分叉的项目历史记录.我们将功能分支与rebase集成以保持线性历史,而不是简单的git合并:

git checkout new-feature
git rebase master
Run Code Online (Sandbox Code Playgroud)

这会将新功能移到master的顶端,这样我们就可以从master执行标准的快进合并:

git checkout master
git merge new-feature
Run Code Online (Sandbox Code Playgroud)

摘自Atlassian Git Rebase教程

  • @not2qubit 你的意思是截图?或图像解释正在对分支机构做什么? (2认同)