在我的存储库中,有一个aq
正在使用的分支。
然后,我在中进行了新工作和错误master
。
使那些提交进入aq
分支的最佳方法是什么?创建另一个新分支master
并将其合并aq
?
git pull origin my_branch_name
在我的存储库中,有一个aq
正在使用的分支。
然后,我在中进行了新工作和错误master
。
使那些提交进入aq
分支的最佳方法是什么?创建另一个新分支master
并将其合并aq
?
git pull origin my_branch_name
Answers:
检出aq
分支,然后从进行基准调整master
。
git checkout aq
git rebase master
git merge
会更好。如果两个分支都随着时间而发展,那么您应该考虑哪个最适合您。
您应该只git merge origin/master
在aq分支上就可以。
git checkout aq
git merge origin/master
rebase
,如果你的分支是本地的,并没有被推倒origin
。merge
如果您的分支已经被推送,请使用。rebase
将重写历史记录。
首先签出要掌握:
git checkout master
完成所有更改,修复程序和提交,然后推送您的主服务器。
返回到分支“ aq”,并在其中合并主节点:
git checkout aq
git merge master
您的分支机构将是最新的。合并的一个很好的基本示例是3.2 Git分支-基本分支和合并。
不能保证主要错误修复不在其他提交中,因此您不能简单地合并。做
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
假设这些提交代表错误修复。
从现在开始,将错误修复保留在单独的分支中。您将能够
git merge hotfixes
当您想将它们全部放入常规dev分支中时。
这(从这里开始)对我有用:
git checkout aq
git pull origin master
...
git push
报价:
git pull origin master
获取master分支的内容并将其与您的分支合并,并创建合并提交。如果有任何合并冲突,您会在此阶段收到通知,您必须在解决合并提交之前进行处理。准备好将本地提交(包括新的合并提交)推送到远程服务器时,请运行git push
。
您也可以通过运行一行来做到这一点。
git merge aq master
这相当于
git checkout aq
git merge master
git merge a b
合并分支a
并合并b
到当前分支。但是git merge a
当您在分支机构a
时什么也做不了(这就是为什么它看起来有点像您认为的那样做的原因)。(见git-scm.com/docs/git-merge#Documentation/...)
编辑:
我的回答以下文件的方式合并master
到aq
,在那里,如果你认为它列出了所做的更改合并的细节aq
之前合并,而不是修改的内容上master
。我已经意识到那可能不是您想要的,即使您认为是!
只是:
git checkout aq
git merge master
很好
是的,此简单的合并将显示从master
到aq
那时所做的更改,而不是相反。但这没关系–因为那是发生了!稍后,当您最终将分支合并到中时master
,即合并将最终显示您对所做的所有更改master
(这正是您想要的,这也是人们期望无论如何都要找到该信息的提交)。
我检查了一下,当您最终将所有内容合并回时,下面的方法也显示与上面的普通方法完全相同的更改(aq
自从原来的aq
和之间进行的所有更改master
)master
。因此,我认为它的唯一真正的缺点(除了过于复杂和非标准...:-/)是,如果回退了最近的更改,git reset --hard HEAD~<n>
并且超出了合并范围,则下面的版本将回滚“错误”分支,您必须手工修复(例如,使用git reflog
&git reset --hard [sha]
)。
[所以,我以前认为是:]
出现问题:
git checkout aq
git merge master
因为合并提交中显示的更改(例如,如果您现在或以后在Github,Bitbucket或您最喜欢的本地git历史记录查看器中查看)是对master所做的更改,而这可能不是您想要的。
另一方面
git checkout master
git merge aq
显示在aq中所做的更改,这可能就是您想要的。(或者,至少,这通常是我想要的!)但是显示正确更改的合并在错误的分支上!
怎么应付?
整个过程以合并提交显示出来,该更改显示了对aq所做的更改(根据上述第二次合并),但是合并影响了aq分支,因此,整个过程是:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
这:将aq合并到主节点上,将相同的合并快速合并到aq,在主节点上撤消它,然后再次将您放回aq!
我觉得我缺少了一些东西-这似乎是您显然想要的东西,而这是很难做到的。
同样,rebase不是等效的。它丢失了时间戳和在aq上进行的提交的标识,这也不是我想要的。
场景:
解
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”后,您可以在文件上找到冲突。您需要手动修复它,现在可以开始推送了。