web-dev-qa-db-ja.com

ローカルのgitコミットをキャンセルする方法

私の問題は、私がファイルを変更したことです。例えば:README、新しい行 ' これは私のテスト用の行です 'を追加し、ファイルを保存してから、以下のコマンドを発行しました。

 git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

私はgithubにコードをプッシュしませんでした、今私はこのコミットをキャンセルしたいです。

このために私は使った

   git reset --hard HEAD~1

しかし、私はREADMEファイルから新しく追加された行 ' テスト用の行 'を失いました。これは起こらないはずです。そこにあるコンテンツが必要です。 コンテンツを保持してローカルコミットをキャンセルする方法はありますか?

612
Amal Kumar S

git resetフラグなしで--hardを使うだけです:

git reset HEAD~1

PS:Unixベースのシステムでは、HEAD^と同じHEAD~1を使うことができます。 HEAD^は行の継続を知らせるので、Windowsでは^は機能しません。だからあなたのコマンドプロンプトはあなたにMore?を尋ねるだけです。

1184
Koraktor

--softフラグの代わりに--hardを使用してください。

git reset --soft HEAD^
153
TpED

あなたがコミットの途中(すなわちあなたのエディタの中)にいる場合は、最初の#より上の行をすべて削除することでそれを取り消すことができます。それはコミットを中止します。

そのため、コミットメッセージが空になるようにすべての行を削除してからファイルを保存することができます。

It should look like this.

すると、Aborting commit due to empty commit message.というメッセージが表示されます。

_ edit _

行をall削除することもでき、結果はまったく同じになります。

Vimのすべての行を削除するには(デフォルトのエディタの場合)、エディタに入ったら最初の行に移動するにはggと入力し、次にすべての行を削除するにはdGと入力します。最後に、wqでファイルを書いて終了すると、コミットは中止されます。

26
inostia

最初にすべきことは、コミットメッセージを削除する前にローカルの変更を保持するかどうかを決定することです。

git logを使用して現在のコミットメッセージを表示し、commit_idbeforeを見つけます。削除したいコミットではなく、削除したい。

ローカルで変更されたファイルを保持し、コミットメッセージを削除する場合:

git reset --soft commit_id

ローカルで変更されたすべてのファイルとコミットメッセージを削除する場合:

git reset --hard commit_id

それがsofthardの違いです

13
mistdon

次のいずれかのパラメータを使用して、git resetを実行するときに、自分のインデックス(次のコミットになるファイルのセット)と作業ディレクトリをどう処理するかをGitに指示できます。

--soft:コミットだけがリセットされ、インデックスと作業ディレクトリは変更されません。

--mixed:作業ディレクトリには触れませんが、これはHEADと一致するようにインデックスをリセットします。すべての変更は作業ディレクトリに残り、変更されたように見えます。

--hard:HEADに合うようにすべて(コミット、インデックス、作業ディレクトリ)をリセットします。

あなたの場合、私はgit reset --softを使ってあなたの変更をインデックスと作業ディレクトリに保存します。詳細な説明については this out を必ず確認してください。

8
Nesha Zoric

以下のコマンドを使用してください。$ git reset HEAD〜1これ以降、ファイルを表示して以下のように元に戻すこともできます。

リセット後のステージングされていない変更:M application/config/config.php M application/config/database.php

1
Omkar