在我的存储库中,我有一个名为aq
的分支,我正在处理它。
然后我在master
提交了新的工作和错误。
将这些提交进入aq
分支的最佳方法是什么?从master
创建另一个新分支,并将其与aq
合并?
答案 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)
对我来说,我已经进行了更改,我想从基础分支获得最新信息。我无法执行rebase
,cherry-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
很好。
是的,这个简单的合并将显示从master
到aq
的更改是在那时进行的,而不是相反。但这没关系–因为那是发生了!稍后,当您最终将分支合并到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)
场景:
解决方案
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”后,您可以在文件上找到冲突。您需要手动修复它,现在可以开始推送了。