私の問題は、私がファイルを変更したことです。例えば: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ファイルから新しく追加された行 ' テスト用の行 'を失いました。これは起こらないはずです。そこにあるコンテンツが必要です。 コンテンツを保持してローカルコミットをキャンセルする方法はありますか?
git reset
フラグなしで--hard
を使うだけです:
git reset HEAD~1
PS:Unixベースのシステムでは、HEAD^
と同じHEAD~1
を使うことができます。 HEAD^
は行の継続を知らせるので、Windowsでは^
は機能しません。だからあなたのコマンドプロンプトはあなたにMore?
を尋ねるだけです。
--soft
フラグの代わりに--hard
を使用してください。
git reset --soft HEAD^
あなたがコミットの途中(すなわちあなたのエディタの中)にいる場合は、最初の#
より上の行をすべて削除することでそれを取り消すことができます。それはコミットを中止します。
そのため、コミットメッセージが空になるようにすべての行を削除してからファイルを保存することができます。
すると、Aborting commit due to empty commit message.
というメッセージが表示されます。
_ edit _ :
行をall削除することもでき、結果はまったく同じになります。
Vimのすべての行を削除するには(デフォルトのエディタの場合)、エディタに入ったら最初の行に移動するにはgg
と入力し、次にすべての行を削除するにはdG
と入力します。最後に、wq
でファイルを書いて終了すると、コミットは中止されます。
最初にすべきことは、コミットメッセージを削除する前にローカルの変更を保持するかどうかを決定することです。
git log
を使用して現在のコミットメッセージを表示し、commit_id
beforeを見つけます。削除したいコミットではなく、削除したい。
git reset --soft commit_id
git reset --hard commit_id
それがsoftとhardの違いです
次のいずれかのパラメータを使用して、git resetを実行するときに、自分のインデックス(次のコミットになるファイルのセット)と作業ディレクトリをどう処理するかをGitに指示できます。
--soft
:コミットだけがリセットされ、インデックスと作業ディレクトリは変更されません。
--mixed
:作業ディレクトリには触れませんが、これはHEADと一致するようにインデックスをリセットします。すべての変更は作業ディレクトリに残り、変更されたように見えます。
--hard
:HEADに合うようにすべて(コミット、インデックス、作業ディレクトリ)をリセットします。
あなたの場合、私はgit reset --soft
を使ってあなたの変更をインデックスと作業ディレクトリに保存します。詳細な説明については this out を必ず確認してください。
以下のコマンドを使用してください。$ git reset HEAD〜1これ以降、ファイルを表示して以下のように元に戻すこともできます。
リセット後のステージングされていない変更:M application/config/config.php M application/config/database.php