1549

私の開発ブランチの 1 つで、コードベースにいくつかの変更を加えました。取り組んでいた機能を完成させる前に、現在のブランチを master に切り替えていくつかの機能のデモを行う必要がありました。しかし、「git checkout master」を使用するだけで、開発ブランチで行った変更が保持されたため、master の機能の一部が壊れてしまいました。だから私がしたことは、コミットメッセージ「一時コミット」を使用して開発ブランチの変更をコミットし、デモのマスターをチェックアウトすることでした。

デモが完了し、開発ブランチでの作業に戻ったので、行った変更を保持しながら、行った「一時的なコミット」を削除したいと思います。それは可能ですか?

4

12 に答える 12

2378

次のように簡単です。

git reset HEAD^

注: 一部のシェル^は特殊文字として扱われるため (たとえば、一部の Windows シェルまたはグロビングが有効になっている ZSH )、そのような場合は引用"HEAD^"または使用する必要がありHEAD~1ます。

git reset--hardまたはファイルを変更せずに、指定されたコミットを指すように--soft移動します。現在のコミットの(最初の)親コミットを指します。これは、あなたの場合、一時的なコミットの前のコミットです。HEADHEAD^

別のオプションとして、通常どおり続行し、次のコミット ポイントで実行することもできます。

git commit --amend [-m … etc]

代わりに最新のコミットを編集し、上記と同じ効果があります。

これは (ほぼすべての git 回答と同様に) 他の誰かがプルした可能性のある場所に既に悪いコミットをプッシュしている場合、問題を引き起こす可能性があることに注意してください。それを避けるようにしてください

于 2013-04-02T18:58:39.790 に答える
2

それを行うもう1つの方法。

一時コミットの上にコミットを追加してから、次のようにします。

git rebase -i

2 つのコミットを 1 つにマージするには (コマンドは明示的な指示を含むテキスト ファイルを開き、編集します)。

于 2013-04-02T19:59:54.253 に答える