Sle*_*lee 633 git version-control git-merge
在我的存储库中,我有一个aq我正在研究的分支.
然后,我承诺了新的工作和错误master.
将这些提交纳入aq分支的最佳方法是什么?创建另一个新分支master并将其合并aq?
Dou*_*rer 730
检查aq分支,并从中退出master.
git checkout aq
git rebase master
Run Code Online (Sandbox Code Playgroud)
Chr*_*ken 277
你应该能够git merge origin/master在你的aq分支上.
git checkout aq
git merge origin/master
Run Code Online (Sandbox Code Playgroud)
Hri*_*hra 83
首先检查掌握:
git checkout master
Run Code Online (Sandbox Code Playgroud)
做所有更改,修补程序和提交并推送您的主人.
回到你的分支'aq',并在其中合并master:
git checkout aq
git merge master
Run Code Online (Sandbox Code Playgroud)
您的分支机构将与主人保持同步.合并的一个很好的基本例子是3.2 Git Branching - Basic Branching and Merging.
Ada*_*ruk 23
无法保证主错误修复不在其他提交中,因此您不能简单地合并.做
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
Run Code Online (Sandbox Code Playgroud)
假设这些提交代表错误修复.
从现在开始,将bug修复保存在单独的分支中.你将能够做到
git merge hotfixes
Run Code Online (Sandbox Code Playgroud)
当你想将它们全部滚动到常规dev分支中时.
小智 21
设想 :
解决方案
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
Run Code Online (Sandbox Code Playgroud)
执行“git stash apply”后,您可以发现文件中存在冲突。您需要手动修复它,现在您可以推送了。
est*_*ezg 16
这(从这里)对我有用:
git checkout aq
git pull origin master
...
git push
Run Code Online (Sandbox Code Playgroud)
引用:
git pull origin master获取主分支的内容并将其与您的分支合并,并创建一个合并提交。如果有任何合并冲突,您将在此阶段收到通知,并且您必须在继续之前解决合并提交。当您准备好将本地提交(包括新的合并提交)推送到远程服务器时,运行git push.
ald*_*tis 11
与它合并 aq
git checkout master
git pull
git checkout aq
git merge --no-ff master
git push
Run Code Online (Sandbox Code Playgroud)
无论rebase或merge是正确的,但是如果你的分支aq中有多个提交,那么当你发送pull请求时,rebase或merge将包含其他人的更改,或者如果将提交压缩到一个提交中,那么我认为我有一种方式(不是最好的方式,但非常安全和清晰)
# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A
Run Code Online (Sandbox Code Playgroud)
编辑:
\n\n我在下面的回答记录了一种合并master到 的方法aq,如果您查看合并的详细信息,它会列出aq合并之前所做的更改,而不是在 上所做的更改master。我意识到这可能不是您想要的,即使您认为是这样!
只是:
\n\ngit checkout aq\ngit merge master\nRun Code Online (Sandbox Code Playgroud)\n\n很好。
\n\n是的,这个简单的合并将显示从 到 的更改是在那时master进行的aq,而不是相反;但这没关系 \xe2\x80\x93 因为这就是发生的事情!稍后,当您最终将分支合并到 时master,合并将最终显示您所做的所有更改master(这正是您想要的,并且是人们期望在其中找到该信息的提交)。
我已经检查过,当您最终将所有内容合并回 时,下面的方法也显示了与上面的正常方法完全相同的更改(自和之间原始拆分aq以来所做的所有更改) 。所以我认为它唯一真正的缺点(除了过于复杂和非标准...... :-/ )是,如果你回滚最近的更改并且这超出了合并,那么下面的版本将回滚“错误”分支,您必须手动修复(例如使用& )。aqmastermastergit reset --hard HEAD~<n>git refloggit reset --hard [sha]
[所以,我之前的想法是:]
\n\n有一个问题:
\n\ngit checkout aq\ngit merge master\nRun Code Online (Sandbox Code Playgroud)\n\n因为合并提交中显示的更改(例如,如果您现在或稍后查看 Github、Bitbucket 或您最喜欢的本地 git 历史查看器)是在 master 上进行的更改,这很可能不是您想要的。
\n\n另一方面
\n\ngit checkout master\ngit merge aq\nRun Code Online (Sandbox Code Playgroud)\n\n显示 aq 中所做的更改,这可能就是您想要的。(或者,至少,这通常是我想要的!)但是显示正确更改的合并位于错误的分支上!
\n\n怎么应对?!
\n\n完整的过程以合并提交结束,显示对 aq 所做的更改(根据上面的第二次合并),但合并影响 aq 分支,如下所示:
\n\ngit checkout master\ngit merge aq\ngit checkout aq\ngit merge master\ngit checkout master\ngit reset --hard HEAD~1\ngit checkout aq\nRun Code Online (Sandbox Code Playgroud)\n\n这:将 aq 合并到 master 上,将相同的合并快进到 aq 上,在 master 上撤消它,然后再次回到 aq 上!
\n\n我觉得我错过了一些东西——这似乎是你显然想要的东西,而且是很难做到的东西。
\n\n另外,rebase 并不等同。它丢失了 aq 上提交的时间戳和身份,这也不是我想要的。
\n对我来说,我已经进行了更改,我想从基础分支获得最新信息.我无法做到rebase,并且cherry-pick会永远这样做,所以我做了以下事情:
git fetch origin <base branch name>
git merge FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下:
git fetch origin master
git merge FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
564238 次 |
| 最近记录: |