Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Git中将更改从master获取到branch_Git_Version Control_Git Merge - Fatal编程技术网

在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