git rebase --skipは正確には何をしますか?


107

私がやっただけgit pull --rebase origin masterで、衝突がありました。

まず、この競合は私が触れなかったファイルにあり、約10回のコミットでした。なぜこれが起こるのですか?

次に、誤ってと入力したところgit rebase --skip、「そのパッチはスキップされました」。

コミットをスキップしたのではないかと心配して、新しいバージョンのマスターブランチをチェックアウトし、リベースしたブランチと新しいマスターブランチとの差分をとった。差分に表示される唯一の変更は最新のコミットであり、ログを見ると、「スキップされた」パッチがコミット履歴に表示されます。

誰かがここで何が起こっているのか説明できますか?


11
誤って入力する方法を教えてくださいgit rebase --skip。たぶん間違って?:)
manojlds 2012年

3
ハ!--abortと入力するつもりですが、不明な理由により--skipと表示されました。本当に考えていませんでした。:)
mrwooster 2012年

9
シェルの履歴はこれが得意です(実行したくないものを実行させるため)。
Florian Klein

回答:


60

それはそれが言うことを行い、コミットをスキップします。rebase --abort同じリベース中に後で競合が発生した場合、スキップされたコミットももちろん元に戻ります。

変更がすでに上流に存在する場合、Gitはコミットを適用できません(ただし、パッチがまったく同じ場合は、通常、自動的にコミットをスキップする必要があります)。自分のコミットはスキップされますが、変更はすでに上流に適用されているため、現在のHEADにまだ存在します。

自分の重要な変更を削除していないことを本当に確認する必要があります;)(reflogを使用して、リベース前の状態に戻ります)


4
では、なぜコミットがまだログに表示されているのですか?そして、なぜ不足しているコミットが差分に表示されるのですか?
mrwooster

3
はい、競合はすでに上流で解決されていました...何らかの理由でgit rebaseは古いマージ競合を引き起こします...私を混乱させる別の事柄...これは競合をスキップしたが、解決したパッチを適用したことを意味しますか?対立?
mrwooster 2012年

3
自分のコミットをスキップしましたが、上流のコミットと同じ変更がありました。コミットをスキップしましたが、変更はまだ行われていました(すでに上流に存在していたため)
knittl 2012年

1
@mittalいいえ、私は--skip行くべき道ではないと思います。Skipはコミットを完全にスキップし、このコミットで行われたすべての変更をドロップします。
knittl 2017

3
@mittal:考えるgit rebaseようにコピー別のブランチに1つのブランチからコミットを。したがって、コミットをスキップすると、コミットの元のコンテンツはスキップされ、パッチは適用されません(そのため、ファイルに加えられたすべての変更がターゲットブランチに反映されることはありません)。最も簡単な方法は、2つのブランチ、それぞれにいくつかのコミットがあるシンプルなgitリポジトリをセットアップしてから、リベースしてコミットをスキップしようとすることです(git rebase --interactiveどのコミットをコピー(pick)またはスキップ(skip)するかを指定するために使用できます)
knittl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.