首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新应用通过Github合并和撤消的更改

重新应用通过Github合并和撤消的更改
EN

Stack Overflow用户
提问于 2016-08-17 23:47:10
回答 2查看 596关注 0票数 1

我不小心通过Github PR将一个分支合并到了master。我立即恢复了它(也是通过github )。几天后,当代码被测试并准备合并时,merge和PR实际上不会将代码放到master中,因为提交已经存在于github中(但代码没有,因为它被还原了。

所以现在我正在试着把这些更改带回master,在几周的无关提交之后。这是git log --oneline输出的大致内容,并对相关点进行了一些注释:

代码语言:javascript
复制
54c73ee (HEAD, origin/master, origin/HEAD, staging) Merge pull request #637 from leonsas/last-night-view-metric-ceiling
...
More unrelated changes that should stay in.
...
af602f0 Merge pull request #639 from leonsas/staging
67ded36 (origin/staging) Merge <-- Here's where I tried merging the changes again, but it doesn't make it into the codebase.
...
Bunch of unrelated commits that should stay.
...
a603d0b Merge pull request #633 from leonsas/revert-628-hr-hrv-audit
c3da670 (origin/revert-628-hr-hrv-audit) Revert "Hr hrv audit"
01f2fab Merge pull request #632 from leonsas/revert-629-always-get-hrvz
5824fc8 (origin/revert-629-always-get-hrvz) Revert "Always get hrvz"  <-- I reverted changes, because code wasn't tested
b75a537 First iteration at setting the max value on the chart
6939035 Merge pull request #631 from leonsas/is-valid-fix
87b53d5 Merge pull request #629 from leonsas/always-get-hrvz   <-- These changes I want in
5b9a848 Merge pull request #628 from leonsas/hr-hrv-audit

将这些更改重新应用到master中的最佳方式是什么?

--更新1

根据Thomas的建议,我再次尝试了rebase解决方案:

代码语言:javascript
复制
> git checkout -b hrv-almost-latest-changes e1d0d7b
> git rebase master-clone
First, rewinding head to replay your work on top of it...
Fast-forwarded hrv-almost-latest-changes to master-clone.
> git push --set-upstream origin hrv-almost-latest-changes

但是master完全更新了hrv-almost-latest-changes,所以在github PR上没有什么可合并的。

--更新2

一般来说,樱桃采摘的效果很好。具体的解决方案是:

代码语言:javascript
复制
git checkout master
git checkout -b hrv-merge-fix
git cherry-pick -m 1 87b53d5
(solve conflicts)
git add <files from solved conflicts>
git cherry-pick --continue
git cherry-pick -m 1 5b9a848
git push origin hrv-merge-fix
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 00:00:01

我不太熟悉github“幕后”的工作,所以我会在您的本地存储库中通过命令行继续执行此操作。

您应该能够使用git checkout master ; git cherry-pick -m X 87b53d5。有关X的值,请参阅git help cherry-pick

代码语言:javascript
复制
   -m parent-number, --mainline parent-number
       Usually you cannot cherry-pick a merge because you do not know which side of the merge should be considered the
       mainline. This option specifies the parent number (starting from 1) of the mainline and allows cherry-pick to
       replay the change relative to the specified parent.
票数 0
EN

Stack Overflow用户

发布于 2016-08-17 23:58:03

问题是PR包含已经是当前master的祖先的commits:

代码语言:javascript
复制
A-    ...   -F--G--H- ... -I
 \          /   |          
  B--C--D--E    revert PR  |
             |             current master
|            merge PR
old master |
           original PR

因为B-E是I的祖先,所以尝试将E合并到I中不会改变任何事情。

但是,您可以将PR分支重新定位到当前master上,以创建一个新的提交字符串,这些提交不是I的祖先,并且仍然包含这些更改:

代码语言:javascript
复制
A-    ...   -F--G--H- ... -I
 \          /               \
  B--C--D--E                 B'--C'--D'--E'
                           |              |
                           master         new PR branch

现在,将E‘合并到I中将应用更改。

基本上,这样做:

代码语言:javascript
复制
$ git fetch
$ git checkout E
$ git checkout -b new-pr-branch
$ git rebase master
$ git push --set-upstream origin new-pr-branch

然后从new-pr-branch提交一份新的公关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39001089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档