41

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

master是我们的“稳定”分支

$ git status
# On branch master
nothing to commit (working directory clean)

在分支上创建模块

$ git checkout -b foo
$ echo "hello" > world
$ git add .
$ git commit -m "init commit for foo module"
$ git checkout master
$ git merge foo

在 master 或其他分支上工作

在接下来的几周内,更多的代码将直接提交给 master 并由其他分支提交。分支在foo这段时间内将保持不变。

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

$ git checkout foo

不好了!foo已经过时了!我明白为什么,但我确实需要foo重新同步。

问题

如何从master分支获取最新内容?

4

3 回答 3

49

如果您不需要周围的分支:

如果您已将 foo 合并回 master,则使用“git branch -d foo”来终止主题分支,然后在将来需要再次破解它时使用“checkout -b foo”。

如果您确实需要周围的分支:

您可以根据主分支重新设置主题分支:

git checkout foo
git rebase master

或者:

git rebase master foo
于 2010-10-24T23:16:39.593 回答
17

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

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"

在我们的功能中间,我们意识到我们的项目中有一个安全漏洞

# 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

将修补程序合并到 master 后,我们有一个分叉的项目历史。代替普通的 git 合并,我们将特性分支与 rebase 集成以维护线性历史记录:

git checkout new-feature
git rebase master

这将 new-feature 移动到 master 的顶端,这让我们可以从 master 进行标准的快进合并:

git checkout master
git merge new-feature

取自Atlassian Git Rebase 教程

于 2015-02-20T13:49:21.720 回答
2

我使用以下内容来组合来自两个分支(我的和你的)的更改,并同步两个分支以继续工作。这似乎奏效了。有人看到它有问题吗?

git checkout mine # make sure I'm on my branch
git commit -a     # commit changes
git push origin mine  
git checkout yours # switch to your branch
git pull origin yours # get changes you've committed & pushed
git checkout mine 
git merge yours # merge your changes into mine
git push origin mine 
git checkout yours 
git rebase mine # set your branch to the merged result
git push origin yours # push the merged result up to your branch on origin
git checkout mine # get back to my branch
于 2019-02-21T20:52:55.763 回答