在Git中从master转换为分支

时间:2011-03-17 14:51:32

标签: git version-control git-merge

在我的存储库中,我有一个名为aq的分支,我正在处理它。

然后我在master提交了新的工作和错误。

将这些提交进入aq分支的最佳方法是什么?从master创建另一个新分支,并将其与aq合并?

13 个答案:

答案 0 :(得分:656)

查看aq分支,并从master重新定位。

git checkout aq
git rebase master

答案 1 :(得分:249)

当您在aq分支上时,您应该能够git merge origin/master

git checkout aq
git merge origin/master

答案 2 :(得分:80)

首先检查掌握:

git checkout master

进行所有更改,修补程序和提交并推送主人。

回到您的分行,' aq',并合并其中的主人:

git checkout aq
git merge master

您的分支机构将与主人保持同步。合并的一个好的基本示例是 3.2 Git Branching - Basic Branching and Merging

答案 3 :(得分:23)

无法保证主错误修复不在其他提交中,因此您无法简单地合并。做

git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...

假设这些提交代表错误修复。

从现在开始,将错误修复保存在单独的分支中。你将能够

git merge hotfixes

当你想将它们全部滚动到常规开发分支时。

答案 4 :(得分:16)

cherry-pick相关提交到分支aq或合并分支master到分支aq

答案 5 :(得分:7)

简单方法

# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A

答案 6 :(得分:7)

将其与aq

合并
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push

答案 7 :(得分:6)

对我来说,我已经进行了更改,我想从基础分支获得最新信息。我无法执行rebasecherry-pick将永远执行,所以我执行了以下操作:

git fetch origin <base branch name>  
git merge FETCH_HEAD

所以在这种情况下:

git fetch origin master  
git merge FETCH_HEAD

答案 8 :(得分:4)

这个(from here)为我工作:

git checkout aq
git pull origin master
...
git push

报价:

  

git pull origin master获取并合并母版的内容   分支与您的分支并创建合并提交。 如果有   合并冲突,您会在此阶段收到通知,并且您必须解决   合并会先提交。当您准备好推动   本地提交(包括新的合并提交)到远程服务器,   运行git push

答案 9 :(得分:2)

你有几个选择。 git rebase master aq到分支上,它将保留提交名称,但如果这是一个远程分支,请不要重新启动。如果您不关心保留提交名称,则可以git merge master aq。如果你想保留提交名称,并且它是一个远程分支git cherry-pick <commit hash>,则提交到你的分支。

答案 10 :(得分:1)

编辑:

我在下面的回答中介绍了一种将master合并到aq中的方法,如果您查看合并的详细信息,它将列出在合并之前在aq上所做的更改,而不是对master进行的更改。我已经意识到那可能不是您想要的,即使您认为是这样!

只是:

git checkout aq
git merge master

很好。

是的,这个简单的合并将显示从masteraq的更改是在那时进行的,而不是相反。但这没关系–因为那是发生了!稍后,当您最终将分支合并到master时,即合并将最终显示您对master所做的所有更改(这正是您想要的,并且是人们所在的提交位置)希望能找到该信息)。

我已经检查过,下面的方法也显示了完全相同的更改(自原始aq和{{1}之间划分以来,对aq所做的所有更改})作为上述常规方法,当您最终将所有内容合并回master时。因此,我认为它的唯一真正的缺点(除了过于复杂和非标准...:-/之外)是,如果您使用master回退了n个最近的更改,并且超出了合并范围,则版本下面的内容会回滚到“错误”分支,您必须手动对其进行修复(例如,使用git reset --hard HEAD~<n>git reflog)。


[所以,我以前的想法是:]

存在问题:

git reset --hard [sha]

因为在合并提交中显示的更改(例如,如果您现在或以后在Github,Bitbucket或您最喜欢的本地git历史记录查看器中查看)是在主数据库上进行的更改,则可能不是您想要的。

另一方面

git checkout aq
git merge master

显示在aq中所做的更改,可能是您想要的 。 (或者,至少,这通常是我想要的!)但是显示正确更改的合并在错误的分支上!

如何应对?!

完整的过程以:合并提交显示对aq所做的更改(根据上面的第二次合并)而结束,但是合并影响aq分支:

git checkout master
git merge aq

这:将aq合并到主节点上,将相同的合并快速转发到aq,在主节点上撤消它,然后再次使您回到aq!

我觉得我缺少了一些东西-这似乎是您显然想要的东西,而这是很难做到的。

此外,变基不是等效的。它丢失了在aq上所做的提交的时间戳和标识,这也不是我想要的。

答案 11 :(得分:0)

您也可以通过运行一行来完成此操作。
git merge aq master

这等效于

git checkout aq
git merge master

答案 12 :(得分:0)

场景:

  • 我从大师say branch-1创建了一个分支,并将其拉到我的本地。
  • “我的朋友”从主人说出branch-2创建了一个分支。
  • 他对母版进行了一些代码更改。
  • 现在我想将这些更改从master分支转移到我的本地分支。

解决方案

git stash // to save all existing changes in local branch
git checkout master // Switch to master branch from branch-1
git pull // take changes from the master
git checkout branch-1 // switchback to your own branch
git rebase master // merge all the changes and move you git head  forward
git stash apply // reapply all you saved changes 

执行“ git stash apply”后,您可以在文件上找到冲突。您需要手动修复它,现在可以开始推送了。