在Git中将更改从master获取到branch
在我的存储库中,我有一个名为在Git中将更改从master获取到branch,git,version-control,git-merge,Git,Version Control,Git Merge,在我的存储库中,我有一个名为aq的分支,我正在处理它 然后我在master中提交了新的工作和bug 让这些提交进入aq分支的最佳方式是什么?从master创建另一个新分支,并将其与aq合并?或者cherry pick相关提交到分支aq或者将分支master合并到分支aq检查aq分支,并从master code>重新设置基础 git checkout aq git rebase master 当您在aq分支上时,您应该能够只git合并origin/master git checkout aq g
aq
的分支,我正在处理它
然后我在master
中提交了新的工作和bug
让这些提交进入
aq
分支的最佳方式是什么?从master
创建另一个新分支,并将其与aq
合并?或者cherry pick
相关提交到分支aq
或者将分支master
合并到分支aq检查aq
分支,并从master code>重新设置基础
git checkout aq
git rebase master
当您在aq分支上时,您应该能够只git合并origin/master
git checkout aq
git merge origin/master
不能保证主错误修复不在其他提交中,因此不能简单地合并。做
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
假设这些提交表示bug修复
但从现在起,将bug修复放在一个单独的分支中。你将能够
git merge hotfixes
当您想将它们全部放入常规开发分支时。首先签出到master:
git checkout master
执行所有更改、热修复和提交,并推送您的主机
返回您的分支“aq”,并在其中合并主节点:
git checkout aq
git merge master
您的分行将与master保持联系。合并的一个很好的基本示例是。对我来说,我已经有了更改,我希望从基本分支获得最新的更改。我无法执行重新设置基址
,而樱桃选择
将花费永远的时间,因此我执行了以下操作:
git fetch origin <base branch name>
git merge FETCH_HEAD
你有几个选择git将master aq
重基到将保留提交名称的分支上,但如果这是远程分支,则不要重基。如果不想保留提交名称,可以git merge master aq
。如果您想保留提交名称,并且它是一个远程分支,请选择提交到您的分支上。简单方法
# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
将其与aq
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
这个()对我有用:
git checkout aq
git pull origin master
...
git push
引述:
git-pull-origin-master
获取并合并master的内容
使用分支进行分支并创建合并提交如果有
合并冲突此阶段将通知您,您必须解决冲突
合并在继续之前提交。当你准备好推动你的
本地提交(包括新的合并提交)到远程服务器,
运行git push
您也可以通过运行一行来完成此操作。
git合并aq主机
这相当于
git checkout aq
git merge master
编辑:
下面我的回答记录了一种将master
合并到aq
中的方法,如果您查看合并的详细信息,它会列出合并前在aq
上所做的更改,而不是在master
上所做的更改。我意识到这可能不是你想要的,即使你认为是
只是:
很好
是的,这个简单的合并将显示从master
到aq
的更改在该点进行,而不是相反;但这没关系,因为事情就是这样发生的!稍后,当您最终将分支合并到master
中时,也就是说,合并将最终显示您对master
所做的所有更改(这正是您想要的,也是人们希望在其中找到该信息的提交)
我已经检查过了,下面的方法也显示了与上面的正常方法完全相同的更改(自从最初在aq
和master
之间拆分以来,aq
上所做的所有更改),当您最终将所有内容合并回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合并到master上,将相同的合并快速转发到aq上,在master上撤消它,然后再次将您放回到aq上
我觉得我错过了一些东西——这似乎是你显然想要的东西,而且很难做到
此外,rebase不是等效的。它会丢失在aq上进行的提交的时间戳和标识,这也不是我想要的。场景:
- 我从大师say branch-1创建了一个分支,并将其拉到我的本地服务器
- 我的朋友从大师say 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”后,您可以在文件上找到冲突。您需要手动修复它,现在您可以推送了
如果rebase“更好”,完全取决于具体情况。为什么不直接调用“git merge master”而不是“git merge origin/master”?如果您的分支是本地分支且未被推送到源站,请使用rebase
。如果您的分支已被推送到源站,请使用merge
。rebase
将重写历史。@Toskan您可能会遇到本地主站未启动的问题
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout 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