6

コミット A、B、C など、いくつかのコミットを行いました。ここで、コミット A と B のみをリモート リポジトリにプッシュしたいと考えています。(そして、後でマージしてプッシュできるように、コミット C を保持します) プッシュする前に、次を実行する必要があります。

git fetch origin master
git rebase --merge FETCH_HEAD

問題は、上記のコマンドで、コミット C の競合も解決するように求められることです。これは、今はプッシュする予定はありません。

コミットCに対処することなく、リベースを行うことは可能ですか.

ありがとう

4

2 に答える 2

8

リベース前の保存

コミットを保存して競合の処理を延期できるようにする最も簡単な方法は、後でコミットを参照できるようにタグを付けることです。

$ git tag save-commitC <sha1>

コミットなしのリベース C

参照を保存したら、コミットせずにリベースします。

$ git rebase --interactive --merge FETCH_HEAD

次のようにエディタでファイルを開く必要があります。

pick <sha1> <message>
pick <sha1> <message>
pick <sha1> <message>
...

このブランチの履歴からコミット Cを削除pick <sha1> <message>するには、コミットの行を削除するかコメントアウトします。

コミットは逆の順序でリストされていることに注意してください。最も古いコミットが最初に、最新のコミットが最後になります。リストの最初のコミットは、 の祖先ではない最初のコミットである必要がありFETCH_HEADます。

C を使用せずにリベースしたら、次に進みます。

$ git push origin master

コミットの再適用

リベースされたブランチに適用する準備ができたら:

$ git cherry-pick save-commitC
   # resolve merge conflicts
$ git commit
$ git tag -d save-commitC
于 2012-06-28T18:13:04.910 に答える
2

リセットしてbをコミットしてから、変更をスタッシュし、プッシュしてから、スタッシュを再適用することができます。

git reset HEAD~1
git stash
(rebasing or whatever other intermediate steps required go here)
git push
git stash pop
于 2012-06-28T18:46:25.993 に答える