54811


GitHubの初心者の質問です．

`develop`ブランチからpull-requestを出したら、`hotfix/3.3.2`で`rebase`を要求されました．  
こういう場合、どのように処理すれば良いのでしょうか？大変すみませんが教えてください．

<https://github.com/dita-ot/dita-ot/pull/3287#pullrequestreview-234301759>

以上 よろしくお願いいたします．


CC BY-SA 4.0
2019-05-07T04:47:27.653
54790
2019-05-09T06:42:08.410
2019-05-07T05:12:41.913
3060
9503
question
git github
Pull requestのrebase


`git remote -v` コマンド実行結果が次のような状態であると仮定して話を進めます:

[code]

    $ git remote -v
    origin  https://github.com/ToshihikoMakita/dita-ot.git (fetch)
    origin  https://github.com/ToshihikoMakita/dita-ot.git (push)
    
[/code]

* * *

プルリクしている(今回の修正をコミットしている)ブランチ `develop` を checkout します:

[code]

    git checkout develop
    
[/code]

本家リモートリポジトリを `upstream` という名前で追加します:

[code]

    git remote add upstream https://github.com/dita-ot/dita-ot.git
    
[/code]

この結果、 `git remote -v` の結果は次のように変わります:

[code]

    $ git remote -v
    origin  https://github.com/ToshihikoMakita/dita-ot.git (fetch)
    origin  https://github.com/ToshihikoMakita/dita-ot.git (push)
    upstream    https://github.com/dita-ot/dita-ot.git (fetch)
    upstream    https://github.com/dita-ot/dita-ot.git (push)
    
[/code]

`upstream` リモートリポジトリをローカルへ取り込みます:

[code]

    git fetch upstream
    
[/code]

これでプルリク先(=本来の分岐元)のブランチ `hotfix/3.3.2` がローカルで参照できるようになりました。  
rebaseしてここから分岐したように修正します:

[code]

    git rebase -i -p upstream/hotfix/3.3.2
    
[/code]

次に示す2つのコミットが表示されると思います。このうち、プルリクしたいコミット以外を消します。すなわち、1行目を削除し2行目だけ残します。

[code]

    pick 163090de3 Merge tag '3.3.1' into develop
    pick 02345b2f3 Use OASIS namspace for generating catalog-dita.xml
    
[/code]

編集が完了したら保存して閉じます。

続いてこのrebaseしたブランチをあなたのリモートリポジトリ `origin` に force push します:

[code]

    git push -f origin HEAD
    
[/code]

以上です。  
pull request が更新されているはずです。  
(pull request に `force-pushed` ログが残ります。)

* * *

[コメント](https://ja.stackoverflow.com/questions/54790/pull-
request%E3%81%AErebase/54811?noredirect=1#comment58685_54811)を書かれた時点でのリポジトリを参照しました。おそらく想定していないコミットが含まれています。  
`git log --graph upstream/hotfix/3.3.2..origin/develop` コマンドで履歴を確認してみてください。

プルリクエストを出したいコミットは  
<https://github.com/ToshihikoMakita/dita-
ot/commit/4496fc355f377aac560640f9fa2417b0eb3c1998>  
だけではないでしょうか。  
`develop`ブランチにはそれ以外のコミットも含まれてしまっています。

プルリクエストしたいのは上記のコミットだけだ、という私の想定が正しいのであれば

[code]

    git checkout develop
    git reset --hard 4496fc355f377aac560640f9fa2417b0eb3c1998
    git push -f origin HEAD
    
[/code]

を実行すれば想定通りのプルリクエストになります。

> DCOでエラーが付いた状態です．

というのは、プルリクエストに  
<https://github.com/ToshihikoMakita/dita-
ot/commit/60fd9916c354ab2181a84adc65d0c26c03f9d2af>  
などが含まれているからでしょう。

正常なプルリクエストになったのであれば、[このプルリクエストページ](https://github.com/dita-ot/dita-
ot/pull/3287)から他の方のコミット履歴は消えるはずです。


CC BY-SA 4.0
2019-05-08T04:25:29.837
54811
2019-05-09T06:42:08.410
2019-05-09T06:42:08.410
2808
2808
54790
answer