web-dev-qa-db-ja.com

Gitで最後にコミットしたコミットを解除する方法

Gitで最後にコミットしたコミットをどのようにコミット解除できますか?

それは...ですか

git reset --hard HEAD

または

git reset --hard HEAD^

732
richard

"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のドキュメントの一部です コミットを指定する方法のすべてを説明しています(^は多くの中で基本的なものです)。

1164
Cascabel

元に戻したいコミットの変更を保存する

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"
260
Alex K

git reset --soft HEAD^変更した変更を作業ツリーに保存します。

git reset --hard HEAD^ あなたが作った変更を回避するでしょう!

219
nfm

注意してください、reset --hardはあなたのローカルな(コミットされていない)修正も削除します。

git reset --hard HEAD^

注:あなたが窓にいるならば、あなたはHEADを引用する必要があります^そう

git reset --hard "HEAD^"
55
tgeros

ちょっと注意してください - あなたがZSHを使用していてエラーを見ているなら

zsh: no matches found: HEAD^

^をエスケープする必要があります

git reset --soft HEAD\^
22
dax

まだ変更をプッシュしていない場合は、git reset --soft [Hash for one commit]を使用して特定のコミットにロールバックします。 --softは、変更をロールバックし続けるようにgitに指示します(すなわち、ファイルに変更済みのマークを付けます)。 --hardは、ロールバックされている変更を削除するようにgitに指示します。

19
Allen Kenney

間違ったブランチにコミットした場合

間違った枝にいる間:

  1. git log -2は最後の2回のコミットのハッシュを返します、$prev$last
  2. git checkout $prev checkoutの正しいコミット
  3. git checkout -b new-feature-branchはfeatureのための新しいブランチを作成します
  4. git cherry-pick $lastはあなたの変更でブランチにパッチを当てます

それからあなたは最初のブランチからコミットを取り除くために上で提案された方法の一つに従うことができます。

14

それに注意してください。

しかし、rebaseコマンドを使うことができます

git rebase -i HEAD~2

viが開き、コミットした行を削除するだけです。また、適切な版@ viに示されている指示を読むことができます、いくつかのことがこのモードで実行できます。

1
Filipe