開発ブランチの 1 つで、コードベースにいくつか変更を加えました。作業中の機能を完成させる前に、現在のブランチをマスター ブランチに切り替えて、いくつかの機能をデモする必要がありました。しかし、「git checkout master」を使用しただけでは、開発ブランチで行った変更も保持され、マスターの一部の機能が壊れてしまいました。そこで、コミット メッセージ「temporary commit」を使用して開発ブランチの変更をコミットし、デモ用にマスターをチェックアウトしました。
デモが終了し、開発ブランチでの作業に戻ったので、変更内容を保持したまま「一時コミット」を削除したいと思います。これは可能ですか?
ベストアンサー1
それは次のように簡単です:
git reset HEAD^
注: 一部のシェルでは^
特殊文字として扱われます(たとえば、一部のWindowsシェルやグロビングを有効にした ZSH) なので、そのような場合には引用符を付け"HEAD^"
たり使用したりする必要があるかもしれません。HEAD~1
git reset
--hard
またはを指定しないと、ファイルは変更されずに、指定されたコミットを指すようになります。--soft
は、現在のコミットの (最初の) 親コミットを参照します。この場合、一時的なコミットの 1 つ前のコミットです。HEAD
HEAD^
別のオプションとして、通常どおり実行し、次のコミット ポイントで代わりに以下を実行することもできます。
git commit --amend [-m … etc]
代わりに最新のコミットを編集し、上記と同じ効果が得られます。
(ほぼすべてのgitの回答と同様に)すでに悪いコミットをプッシュして、他の誰かがプルした可能性がある場合は、問題が発生する可能性があります。それを避けるようにしてください。