在我的存储库中,我有一个名为aq
我正在处理的分支。
然后我在master
.
将这些提交放入aq
分支的最佳方法是什么?创建另一个新分支master
并将其与aq
?
在我的存储库中,我有一个名为aq
我正在处理的分支。
然后我在master
.
将这些提交放入aq
分支的最佳方法是什么?创建另一个新分支master
并将其与aq
?
检查aq
分支,并从master
.
git checkout aq
git rebase master
git merge origin/master
当你在你的 aq 分支上时,你应该能够。
git checkout aq
git merge origin/master
先签出大师:
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
当您想将它们全部滚动到常规开发分支中时。
这(从这里)对我有用:
git checkout aq
git pull origin master
...
git push
报价:
git pull origin master
获取主分支的内容并将其与您的分支合并,并创建一个合并提交。如果有任何合并冲突,您将在此阶段收到通知,并且您必须在继续之前解决合并提交。当您准备好将本地提交(包括新的合并提交)推送到远程服务器时,运行git push
.
将其与aq
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
相关cherry-pick
的提交到分支aq
或合并分支master
到分支aq
。
对我来说,我已经进行了更改,我想要来自基础分支的最新版本。我无法做到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
设想 :
解决方案
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”后,您可以在文件中找到冲突。您需要手动修复它,现在您可以推送了。
编辑:
我在下面的回答记录了一种合并master
到的方法aq
,如果您查看合并的详细信息,它会列出在aq
合并之前所做的更改,而不是对 所做的更改master
。我意识到这可能不是你想要的,即使你认为它是!
只是:
git checkout aq
git merge master
很好。
是的,这个简单的合并将表明从 到 的更改master
是aq
在那时进行的,而不是相反;但这没关系——因为那确实发生了!稍后,当您最终将分支合并到master
中时,即合并最终将显示您所做的所有更改master
(这正是您想要的,并且是人们无论如何都希望找到该信息的提交)。
我已经检查过aq
,当您最终将所有内容合并回. 所以我认为它唯一真正的缺点(除了过于复杂和非标准...... :-/ )是,如果你回退 n 最近的更改并且这超过了合并,那么下面的版本会回滚'错误' 分支,您必须手动修复(例如使用& )。aq
master
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 上提交的时间戳和身份,这也不是我想要的。
You have a couple options. git rebase master aq
onto 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.
您也可以通过运行单行来执行此操作。
git merge aq master
这相当于
git checkout aq
git merge master