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\n
Run Code Online (Sandbox Code Playgroud)\n\n很好。
\n\n是的,这个简单的合并将显示从 到 的更改是在那时master
进行的aq
,而不是相反;但这没关系 \xe2\x80\x93 因为这就是发生的事情!稍后,当您最终将分支合并到 时master
,合并将最终显示您所做的所有更改master
(这正是您想要的,并且是人们期望在其中找到该信息的提交)。
我已经检查过,当您最终将所有内容合并回 时,下面的方法也显示了与上面的正常方法完全相同的更改(自和之间原始拆分aq
以来所做的所有更改) 。所以我认为它唯一真正的缺点(除了过于复杂和非标准...... :-/ )是,如果你回滚最近的更改并且这超出了合并,那么下面的版本将回滚“错误”分支,您必须手动修复(例如使用& )。aq
master
master
git reset --hard HEAD~<n>
git reflog
git reset --hard [sha]
[所以,我之前的想法是:]
\n\n有一个问题:
\n\ngit checkout aq\ngit merge master\n
Run Code Online (Sandbox Code Playgroud)\n\n因为合并提交中显示的更改(例如,如果您现在或稍后查看 Github、Bitbucket 或您最喜欢的本地 git 历史查看器)是在 master 上进行的更改,这很可能不是您想要的。
\n\n另一方面
\n\ngit checkout master\ngit merge aq\n
Run 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\n
Run 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 次 |
最近记录: |