Gitで最後にコミットしたコミットをどのようにコミット解除できますか?
それは...ですか
git reset --hard HEAD
または
git reset --hard HEAD^
?
"uncommit"の意味がよくわからず、git reset
を使用するかどうかわからない場合は、「 前のGitコミットに戻す 」を参照してください。
もしあなたがgit reset
をもっとよく理解しようとしているなら、 " あなたは普通の英語で" git reset "が何をするのか説明できますか? "。
あなたがgit reset
を使いたいことを知っているなら、それはまだあなたが "uncommit"によって意味するものに依存します。あなたがやりたいことがコミットの行為を元に戻し、他のすべてを無傷のままにすることであるならば、使用してください:
git reset --soft HEAD^
あなたがコミットしたこととあなたが上演したすべてのことを元に戻したいが、作業ツリーを残したままなら(あなたのファイルはそのまま):
git reset HEAD^
そして、実際に完全元に戻したい場合は、すべてのコミットされていない変更を破棄し、すべてを前のコミットにリセットします(元の質問のとおり):
git reset --hard HEAD^
元の質問では、HEAD
ではなくHEAD^
も尋ねられました。 HEAD
は現在のコミット - 一般的には現在チェックアウトされているブランチの先端 - を表します。 ^
は、any commit指定子に付けることができる表記法で、「直前のコミット」を意味します。そのため、HEAD^
がマスターブランチの先端より前のコミットであるのと同様に、master^
が現在のコミットの前のコミットです。
これは git-rev-parseのドキュメントの一部です コミットを指定する方法のすべてを説明しています(^
は多くの中で基本的なものです)。
元に戻したいコミットの変更を保存する
git reset --soft HEAD^
元に戻したいコミットからの変更を破棄する
git reset --hard HEAD^
あなたも言うことができます
git reset --soft HEAD~2
2コミットします。
編集:charsiが述べたように、あなたがWindowsを使っているなら、あなたはHEADを置くか、または引用符でハッシュをコミットする必要があるでしょう。
git reset --soft "HEAD^"
git reset --soft "asdf"
git reset --soft HEAD^
変更した変更を作業ツリーに保存します。
git reset --hard HEAD^
あなたが作った変更を回避するでしょう!
注意してください、reset --hard
はあなたのローカルな(コミットされていない)修正も削除します。
git reset --hard HEAD^
注:あなたが窓にいるならば、あなたはHEADを引用する必要があります^そう
git reset --hard "HEAD^"
ちょっと注意してください - あなたがZSHを使用していてエラーを見ているなら
zsh: no matches found: HEAD^
^
をエスケープする必要があります
git reset --soft HEAD\^
まだ変更をプッシュしていない場合は、git reset --soft [Hash for one commit]
を使用して特定のコミットにロールバックします。 --soft
は、変更をロールバックし続けるようにgitに指示します(すなわち、ファイルに変更済みのマークを付けます)。 --hard
は、ロールバックされている変更を削除するようにgitに指示します。
間違ったブランチにコミットした場合
間違った枝にいる間:
git log -2
は最後の2回のコミットのハッシュを返します、$prev
と$last
git checkout $prev
checkoutの正しいコミットgit checkout -b new-feature-branch
はfeatureのための新しいブランチを作成しますgit cherry-pick $last
はあなたの変更でブランチにパッチを当てますそれからあなたは最初のブランチからコミットを取り除くために上で提案された方法の一つに従うことができます。
それに注意してください。
しかし、rebaseコマンドを使うことができます
git rebase -i HEAD~2
vi
が開き、コミットした行を削除するだけです。また、適切な版@ vi
に示されている指示を読むことができます、いくつかのことがこのモードで実行できます。