2016-08-17 13 views
0

Github PRを介して偶然ブランチをmasterにマージしました。すぐに私はそれを元に戻した。数日後、そのコードがテストされ、マージの準備ができたら、マージとPRは実際にコードをマスターに取得しませんでした。コミットは既にgithubに存在しているからです(コードは元に戻りました。Githubを通じてマージされ、元に戻された変更を再度適用します

だから今、私はコミット無関係の価値週間後に、バックマスターにそれらの変更を取得しようとしている。これは大体何関連ポイントにいくつかのコメントをgit log --oneline出力です:。どうなるか

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 

これらの変更をマスターに再度適用する最良の方法は?

- 更新1

> 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にマージするものは何もありません: はトーマスの提案を1として、私は再びリベースソリューションを試してみました。

- 更新2

は一般的に、ピッキングの桜がうまく働きました。具体的なソリューションでした:

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 

答えて

0

githubが "舞台裏で"何をしているのかあまりよく知らないので、コマンドラインのローカルリポジトリでこれを継続します。

git checkout master ; git cherry-pick -m X 87b53d5を使用することができます。 Xの値をgit help cherry-pickを参照してください:私は成功せず、実際にすることをしようとしたし、もう一度試してみました

-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

このように、いくつかの紛争解決の後に' -m 1'を使ってトリックを行ったようです。コードを手動でレビューして、すべてが期待どおりであることを確認します。 – leonsas

0

問題はPRがすでに現在のマスターの祖先ですコミットが含まれていることである。

A- ... -F--G--H- ... -I 
\  / |   
    B--C--D--E revert PR | 
      |    current master 
|   merge PR 
old master | 
      original PR 

BEは、私の祖先であるため、私にEをマージしようとする試みではありません何かを変えるつもりです。

しかし、あなたは私の祖先ではないコミットの新しい文字列を作成するには、現在のマスターにPRブランチをリベースでき、どのまだそれらの変更を保持する:

A- ... -F--G--H- ... -I 
\  /    \ 
    B--C--D--E     B'--C'--D'--E' 
          |    | 
          master   new PR branch 

さて、に「Eをマージ私は変更を適用するつもりです。

$ 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から新しいPRファイル:基本的に

は、これを行います。

+0

。詳細については、質問の更新を参照してください。 – leonsas

+0

@leonsas:あなたの履歴のどこにでもe1d0d7bは表示されません。 'git log --online --graph --all --decorate'の関連する出力を、おそらく[gist](https://gist.github.com/)として貼り付けることができますか? –

+0

ああ、e1d0d7bはマージコミット前の最新のコミットです。私は、マージコミット(87b53d5)でもう一度試してみます。 – leonsas

関連する問題