843

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

然后我在master.

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

4

13 回答 13

970

检查aq分支,并从master.

git checkout aq
git rebase master
于 2011-03-17T14:54:41.537 回答
363

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

git checkout aq
git merge origin/master
于 2011-03-17T14:54:47.663 回答
114

先签出大师:

git checkout master

执行所有更改、修补程序和提交并推送您的主控。

回到你的分支“aq”,并在其中合并 master:

git checkout aq
git merge master

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

于 2014-08-21T16:33:19.433 回答
33

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

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

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

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

git merge hotfixes

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

于 2011-03-17T22:07:51.243 回答
20

这(从这里)对我有用:

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

报价:

git pull origin master获取主分支的内容并将其与您的分支合并,并创建一个合并提交。如果有任何合并冲突,您将在此阶段收到通知,并且您必须在继续之前解决合并提交。当您准备好将本地提交(包括新的合并提交)推送到远程服务器时,运行git push.

于 2019-09-26T15:14:48.350 回答
19

将其与aq

git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
于 2018-04-10T02:24:16.167 回答
18

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

于 2011-03-17T14:54:25.297 回答
8

对我来说,我已经进行了更改,我想要来自基础分支的最新版本。我无法做到rebase,并且cherry-pick会永远采取,所以我做了以下事情:

git fetch origin <base branch name>  
git merge FETCH_HEAD

所以在这种情况下:

git fetch origin master  
git merge FETCH_HEAD
于 2016-07-06T12:12:22.077 回答
8

简单的方法

# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
于 2017-05-19T10:06:39.707 回答
7

设想 :

  • 我从 master say branch-1 创建了一个分支并将其拉到我的本地。
  • 我的朋友从 master 说 branch-2 创建了一个分支。
  • 他向大师提交了一些代码更改。
  • 现在我想将这些更改从主分支转移到我的本地分支。

解决方案

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”后,您可以在文件中找到冲突。您需要手动修复它,现在您可以推送了。

于 2020-05-15T06:10:52.570 回答
4

编辑:

我在下面的回答记录了一种合并master到的方法aq,如果您查看合并的详细信息,它会列出在aq合并之前所做的更改,而不是对 所做的更改master。我意识到这可能不是你想要的,即使你认为它是!

只是:

git checkout aq
git merge master

很好。

是的,这个简单的合并将表明从 到 的更改masteraq在那时进行的,而不是相反;但这没关系——因为那确实发生了!稍后,当您最终将分支合并到master中时,即合并最终将显示您所做的所有更改master(这正是您想要的,并且是人们无论如何都希望找到该信息的提交)。

我已经检查过aq,当您最终将所有内容合并回. 所以我认为它唯一真正的缺点(除了过于复杂和非标准...... :-/ )是,如果你回退 n 最近的更改并且这超过了合并,那么下面的版本会回滚'错误' 分支,您必须手动修复(例如使用& )。aqmastermastergit reset --hard HEAD~<n>git refloggit 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 上提交的时间戳和身份,这也不是我想要的。

于 2020-02-17T18:50:29.540 回答
3

You have a couple options. git rebase master aqonto the branch which will keep the commit names, but DO NOT REBASE if this is a remote branch. You can git merge master aq if you don't care about keeping the commit names. If you want to keep the commit names and it is a remote branch git cherry-pick <commit hash> the commits onto your branch.

于 2017-01-27T23:12:57.770 回答
0

您也可以通过运行单行来执行此操作。
git merge aq master

这相当于

git checkout aq
git merge master
于 2019-11-04T22:19:53.600 回答