私がプッシュしなかったコミットは2つあります。
$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.
最初のもの(最も古いもの)をロールバックし、2番目のものを保持するにはどうすればよいですか。
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
ここから:
http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want
私はただする必要がありますか:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
あれは?
最も安全でおそらく最もクリーンな方法は対話的にリベースすることです。
git rebase -i HEAD^^
または、
git rebase -i baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e^
そこから、コミットを潰して、1つ以上のコミットを前のコミットにまとめることができます。履歴からコミットを完全に削除するには、リストからその行を削除します。
git revert
を使用してコミットを元に戻すことはできますが、コミットメッセージを履歴に追加することになるため、望ましくない場合があります。 -n
パラメータを使用して、Gitに復帰をすぐにコミットしないように指示します。あなたは対話的にリベースし、物事をきれいに保つためにそれらを前のコミットまで潰すことができます。
ここで作業している2つのコミットが同じファイルに影響する場合は、マージの競合が発生する可能性があります。
git reset --hard
を使用してリポジトリをリセットすると、元に戻すことはできないため、慎重に行う必要があります。
歴史の書き換えは慎重に行われるべきです。
これは http://nakkaya.com/2009/09/24/git-delete-last-commit/ からであれば私のために働きました
最後のコミットをGit削除
私がコーヒーを使い果たしたときに夜遅くなって、私は私が持ってはいけないものをコミットします。それから、私が最後に行ったコミットを削除する方法を次の10 - 15分のグーグルで過ごします。 3回目以降は、後で参照できるように記録したいと思いました。
がらくたをコミットしたがプッシュされていない場合
git reset --hard HEAD~1
HEAD〜1は、先頭へのコミットの省略形です。あるいは、リセットしたいハッシュのSHA-1を参照することができます。 --hardを使用すると、コミット前のコミット以降に作業ツリー内の追跡対象ファイルに加えられた変更は失われます。
行った作業を一掃したくない場合は、コミットを削除する
--soft
オプションを使用することができますが、git statusが示すように、変更されたファイルはすべて「コミットされる変更」のままになります。今、あなたがすでにプッシュしていて、誰かが引っ張ってきたのであれば、通常私の場合は、git resetを使うことはできません。しかし、あなたはgit revertをすることができます、
git revert HEAD
これは偶発的なコミットによって導入されたすべてを元に戻す新しいコミットを作成します。
いや。 git-reset --hardはあなたを歴史の中に連れ戻します。あなたが探しているのはgit revertです。
私はちょうどこれをやった:
git rebase -i HEAD^^
私はそれを台無しにした
git rebase --abort
それからまたやりました。それから私はこのようにプッシュする必要がありました:
git Push Origin master -f
そしてそれは私がロールバックしたコミットよりも新しいコミットを破壊しました。うまくいった。
git reset --hard
を元に戻すことができないというjtimbermanのコメントを参照すると、それは完全に真実ではありません。こちらを参照してください。 https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1
いいえ、git reset --hard baf8d5e
は3368e1c
コミットを削除し、その後HEADはbaf8d5e
になります。
3368e1c
コミットを維持してbad8d5e
コミットを削除したい場合、最も簡単な解決策は "git rebase -i HEAD~2
"を実行することです(つまり、最後の2つのコミットを対話式にリベースする)。このコマンドはコミットメッセージエディタを起動し、最後の2つのコミットそれぞれに対して1行表示されます。 bad8d5e
commit行を削除して保存するだけです。そしてgitはあなたの履歴を書き換え、2回目のコミットは消えます。
squash
、edit
など、コミットメッセージエディタで使用できる便利なコマンドは他にもあります。対話式リベースは非常に強力です。
誰かがすでにこれらのコミットを見ているのであれば、これをしないでください(リポジトリからプッシュまたはプル)。
git reset --hard {ref}
リポジトリに他のコミットが1つしかない場合にコミットを取り消すには、これが唯一の方法です(例:初期コミットとあと1つ)。残りの方法(元に戻す、リベース)は、少なくともgit 1.7.5.1以降では機能しません。
git reset
の後にgit gc
を付けると、gitは実際にはリポジトリから古いコミットデータを完全に削除します。
git checkout <treeish> -- /path/to/dir
/ path /から/ dirに与えられた“ treeish”からディレクトリを戻します。
リポジトリフォルダ内のHEADファイルから最後のコミットのハッシュコードを手動で編集することでこれを機能させることができました。
"centralRepository\refs\heads\master"
"centralRepository\refs\heads\branch2"
それ以前は、ローカルで行ったUNMERGE操作をOriginにプッシュすることはできませんでした。それは「いくつかの参照をプッシュするのに失敗した」とセントラルリポジトリに言い続けました。