在我的存储库中,我正在处理一个名为 aq
的分支。
然后我在 master
中提交了新的工作和错误。
将这些提交放入 aq
分支的最佳方法是什么?从 master
创建另一个新分支并将其与 aq
合并?
git pull origin my_branch_name
检查 aq
分支,并从 master
变基。
git checkout aq
git rebase master
当您在您的 aq 分支上时,您应该能够git merge origin/master
。
git checkout aq
git merge origin/master
origin
,请使用 rebase
。如果您的分支已被推送,请使用 merge
。 rebase
将重写历史记录。
先签出大师:
git checkout master
执行所有更改、修补程序和提交并推送您的主控。
回到你的分支“aq”,并在其中合并 master:
git checkout aq
git merge master
您的分支将与 master 保持同步。 3.2 Git Branching - Basic Branching and Merging 是一个很好的基本合并示例。
无法保证主错误修复不在其他提交中,因此您不能简单地合并。做
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
假设这些提交代表错误修复。
不过,从现在开始,将错误修复保留在单独的分支中。你将能够
git merge hotfixes
当您想将它们全部滚动到常规开发分支中时。
这(from here)对我有用:
git checkout aq
git pull origin master
...
git push
报价:
git pull origin master 获取 master 分支的内容并将其与您的分支合并,并创建一个合并提交。如果有任何合并冲突,您将在此阶段收到通知,并且您必须在继续之前解决合并提交。当您准备好将本地提交(包括新的合并提交)推送到远程服务器时,运行 git push。
将其与 aq
合并
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
cherry-pick
相关提交到分支 aq
或将分支 master
合并到分支 aq
。
设想 :
我从 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”后,您可以在文件中找到冲突。您需要手动修复它,现在您可以推送了。
对我来说,我已经进行了更改,我想要来自基础分支的最新版本。我无法执行 rebase
,并且 cherry-pick
将永远花费,因此我执行了以下操作:
git fetch origin <base branch name>
git merge FETCH_HEAD
所以在这种情况下:
git fetch origin master
git merge FETCH_HEAD
简单的方法
# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
编辑:
我在下面的回答记录了一种将 master
合并到 aq
的方法,如果您查看合并的详细信息,它会列出合并之前在 aq
上所做的更改,而不是在 master
上所做的更改。我意识到这可能不是你想要的,即使你认为它是!
只是:
git checkout aq
git merge master
很好。
是的,这个简单的合并将显示从 master
到 aq
的更改是在那个时候进行的,而不是相反;但这没关系——因为那确实发生了!稍后,当您最终将分支合并到 master
时,合并最终将显示您对 master
所做的所有更改(这正是您想要的,也是人们期望的提交无论如何都要找到该信息)。
我已经检查过,下面的方法也显示了与上述正常方法完全相同的更改(自 original 在 aq
和 master
之间拆分以来对 aq
所做的所有更改),当您最终将所有内容合并回 master
。所以我认为它唯一真正的缺点(除了过于复杂和非标准...... :-/ )是如果你用 git reset --hard HEAD~<n>
回退 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 上提交的时间戳和身份,这也不是我想要的。
master
中的一些更改合并到 aq
中,根据原始问题,所以我不确定我是否理解你建议的问题?当然,在完成我提到的上述任一解决方案之后,您最终可以将 aq
合并到 master
,然后对两者进行进一步的更改 - 这不会导致任何问题。
你有几个选择。 git rebase master aq
到将保留提交名称的分支上,但如果这是一个远程分支,则不要 REBASE。如果您不关心保留提交名称,您可以git merge master aq
。如果您想保留提交名称并且它是远程分支 git cherry-pick <commit hash>
,则提交到您的分支。
您也可以通过运行一行来执行此操作。
git merge aq master
这相当于
git checkout aq
git merge master
git merge a b
将分支 a
和 b
合并到当前分支。但是,当您在分支 a
上时,git merge a
将什么也不做(这就是为什么它看起来有点像您认为它正在做的事情)。 (见git-scm.com/docs/git-merge#Documentation/…。)
不定期副业成功案例分享
git merge
会更好。如果两个分支都随着时间的推移而发展,您应该考虑哪个最适合您。