2016-12-21 12 views

答えて

2

コミットをリモートサーバーにプッシュされていない場合は、Gitの歴史を修正するためにgit rebaseを使用することができます。

あなたはそれを行うことができます:それはコミットの一覧が表示されます

git rebase -i commit-hash^ 

。最初の行は、削除したいコミットでなければなりません。編集したファイルからその行を削除し、保存して閉じます。あなたがそれを行う前に、リモートサーバにプッシュしなかった場合

は、コミット直前に削除した後にコミットがあなただけの履歴から削除された1前にコミットをもとに書き直されたことに注意してください。その特別な理由から、あなたの履歴がちょうど分かれたため、すべてのコミットが変更されます。だからあなたがそれを押し進めようとするなら、それは早送りではなく、プッシュを強制しなければならないでしょう。そのため

、あなたは私はあなたがケースの何かで歴史を修正した枝を指すブランチを維持することをお勧めgit rebaseに慣れていない場合はうまくいきません。

また、特定のコミットが複数のブランチで共有されている場合、1つのブランチの履歴を分岐させると、複数の問題が発生します。これは、1つのブランチを古い履歴から新しい履歴のブランチに簡単にマージできないためです。多くのコミットが複製され、あるブランチで削除したコミットは他のブランチでは削除されません。

gitの歴史を変えることは時間旅行のようなものだと考えてください。あるポイントでの変更は、新しいパラレルユニバースを作成します。過去の変化の後にあったことは、あなたが過去に行った変更の影響を実際に受けます。

5

これは、上記のコミットに影響を与えるべきではありません。

あなたは枝の途中からコミットを削除するか、本当にどこにでもおそらく除くブランチのHEAD場合は、にその枝の歴史を書き換えます。これは、これを実行するために使用するツール、つまりgit rebase -interactivegit filter-branchは、削除したコミット後のすべてを再試行する必要があるためです。これは、公衆共有ブランチには望ましくありません。なぜなら、誰もがその変更に追いつくために非常に厳しい措置を講じる必要があるからです。

むしろ、あなたのための安全な賭けはgit revertを使用することです:これは新しいが効果的に真ん中がしたコミットすべてを取り消し、あなたの枝の上にコミット追加します

git revert <SHA-1 of commit to delete> 

ところで、あなたがの場合、実際にがコミットを削除したい場合は、対話型のリベースを行うことをお勧めします。

関連する問題