取り消し - github コミット履歴 削除




Gitのブランチからコミットを削除する (18)

git reset --hard

git push origin HEAD --force

1つ以上のコミットがタグ付けされている場合、最初にタグを削除します。 それ以外の場合、タグ付きコミットは削除されません。

コミットを削除する方法を知りたい。

delete 、あたかもコミットしていないかのようになり、将来私がプッシュすると、私の変更はリモートブランチに押し込まれません。

私はgitのヘルプを読んで、私は使用するべきコマンドはgit reset --hard HEADだと思う。 これは正しいです?


git revert https://git-scm.com/docs/git-revert使用してhttps://git-scm.com/docs/git-revert 。すべてのコードを元に戻し、次のコミットを行うことができます。ヘッドは最後のコミットを指します。 元に戻されたコミットは決して削除されませんが、最後のコミットには影響しません。


なぜ私は仕事をコミットしようとしたばかりの人が、Gitを使っている間違いのためにすべての作業を削除したいのではないかと思うので、この答えを追加しています!

あなたが仕事をしてコミットコマンド(あなたがレポを押す前にキャッチした)を元に戻したい場合は:

git reset --soft HEAD~1

前回のコミット以降進行中の作業を破棄しない限り、--hardフラグを使用しないでください


コミット全体を削除する

git rebase -p --onto SHA^ SHA

明らかに "SHA"を削除したいリファレンスに置き換えてください。 そのコマンドの「^」はリテラルです。

http://sethrobertson.github.io/GitFixUm/fixup.html


注意: git reset --hard 削除します。 このコマンドを実行する前に、 変更したいローカルの変更隠しておいてください

あなたがそのコミットに座っていると仮定すると、このコマンドはそれをつぶすでしょう...

git reset --hard HEAD~1

HEAD~1頭の前にコミットを意味する。

あるいは、 git logの出力を見て、バックアップしたいコミットのコミットIDを見つけて、これを行うことができます:

git reset --hard <sha1-commit-id>

あなたがすでにそれを押した場合、それを取り除くために強制押しをする必要があります...

git push origin HEAD --force

しかし 、他の人がそれを引っ張ってきたとすれば、あなたは新しい支店を始める方が良いでしょう。 彼らが引っ張ってくると、それを自分たちの仕事に併合するだけで、あなたはそれを再び押し戻すことになるでしょう。

既にプッシュしている場合は、 git revertを使用して変更を元に戻す "ミラーイメージ"コミットを作成する方が良いかもしれません。 ただし、両方のコミットがログに記録されます。

FYI- git reset --hard HEADは、WORK IN PROGRESSを取り除きたい場合に最適です。 直近のコミットにリセットされ、作業ツリーとインデックスのすべての変更が消去されます。

最後に、あなたが "削除した"コミットを見つける必要がある場合、リポジトリのガベージコレクションがない限り、 git reflog存在します。


あなたのコードを一時フォルダにバックアップしてください。 次のコマンドはサーバーと同じにリセットされます。

git reset --hard HEAD
git clean -f
git pull

変更を保存して、最新のコミットを削除したい場合

git reset --soft HEAD^
git pull

すでにプッシュしている場合は、まずHEAD ($ GIT_COMMIT_HASH_HERE)にあるコミットを見つけて、次のコマンドを実行します。

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

次に、レポがクローン化された各場所で次のコマンドを実行します。

git reset --hard origin/master

もう一つの可能​​性は私の個人的に好きなコマンドです:

git rebase -i <commit>~1

このコマンドは、対話モード-iでリベースを開始します。 それ以来エディタはすべてのコミットをリストアップします。 削除するコミットを含む行を削除し、ファイルを保存します。 Rebaseは残りの作業を行い、コミットだけを削除し、他のすべてをログに戻します。


ヒストリを保持し、コミットと復帰を表示するには、次のものを使用する必要があります。

git revert GIT_COMMIT_HASH

なぜ元に戻すのかを説明するメッセージを入力し、次に:

git push  

git logを発行すると、「間違った」コミットメッセージと復帰ログメッセージの両方が表示されます。


リモートリポジトリにプッシュしていないと仮定すると、リポジトリを再クローンすることができます。 これは数回の選択の私の方法でした。


ローカルブランチで削除するには、

git reset --hard HEAD~1

リモートブランチで削除するには、

git push origin HEAD --force

ローカルブランチのリセット

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

原点に強制的に押し込む

git push -f origin

出典: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8 : https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

最後のコミットを削除する

たとえば、最後のコミット

git push origin + aa61ab32 ^:master

今度は、このコミットを削除してから、これを行う簡単な方法

ステップ

  1. 最初にブランチを現在のコミットの親にリセットする

  2. それをリモートに強制的に押し込みます。

git reset HEAD^ --hard

git push origin -f

特定のコミットについては、次のようにリセットしたい

git reset bb676878^ --hard

git push origin -f

変更を公開していない場合、最新のコミットを削除するには、

$ git reset --hard HEAD^

(コミットされていない変更もすべて削除されますので注意して使用してください)。

既に削除対象コミットを公開している場合は、 git revertを使用してください

$ git revert HEAD

最新のコミットを修復したい場合は、次のようにしてコミットを取り消し、その中のファイルをステージング解除することができます。

git reset HEAD~1

これは、リポジトリをファイルをステージングしたgit addコマンドの前の状態に戻します。 変更は作業ディレクトリに反映されます。 HEAD〜1は、ブランチの現在のチップの下のコミットを指します。

N個のコミットをコミットしないようにしたいが、コード変更を作業ディレクトリに残したい場合は次のようにします。

git reset HEAD~N

最新のコミットを取り除き、コードの変更を保持したくない場合は、「ハード」リセットを行うことができます。

git reset --hard HEAD~1

同様に、最後のN回のコミットを破棄し、コードの変更を保持したくない場合は、次のようにします。

git reset --hard HEAD~N

私がコミットしてプッシュするときに私が通常行うこと(誰かが彼のコミットをプッシュすると、これが問題を解決する):

git reset --hard HEAD~1

git push -f origin

この助けを願って


間違い:

私はgit rebase -i --root私のブランチを編集しました。無意識のうちに、マスターとは異なる最初のコミットを書き直すことができました。( GitHub for Windowsのデフォルトビューはマスターとの比較です。

私はSilicon Valleyの髭を育てましたが、900以上のコミットがSublimeの中に入っていました。 変更なしで終了すると、バッテリーを充電してから、すべての900+個のコミットが無作為にリベースされたので、今度は自分のコミット時間をリセットします。

Gitを倒して元の時間を保存することを決めたので、私はこのローカルリポジトリを削除し、リモートから再クローンしました。

今では、削除したいと思っていたマスターに最近の不要なコミットを再追加しました。

オプションを使い果たす:

私はgit revertは望んでいませんでした。

git reset --hard HEADは何もしなかった、 reflogチェックした後、最後のHEADはクローンだった - Gitが勝った。

最新のSHAを取得するには、github.com上のリモートリポジトリを確認しました。

git reset --hard <SHA>が働いていると思った後、私はmasterと1 ... 2 ... poofの別のブランチに更新しました! コミットが戻ってきた - Gitが勝つ。

マスターに戻ってチェックし、 git rebase -i <SHA>を試してみて、その行を削除してください...無駄に、悲しいことに言います。 " ここで行を削除すると、コミットは失われます "。 ああ...新機能では、 2.8.3リリースノートで n00bを取り上げています

ソリューション:

git rebase -i <SHA>次にd, drop = remove commitます。

検証するために、私は別のブランチにチェックアウトして、voila - マスターからフェッチ/プルするための隠蔽コミットはしません。

https://twitter.com/holman/status/706006896273063936

おはようございます。


git rebase -i HEAD~2

ここで '2'はリベースするコミットの数です。

'git rebase -i HEAD`

すべてのコミットを再作成したい場合。

次に、これらのオプションの1つを選択することができます。

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

これらの行は並べ替えることができます。 それらは上から下に実行されます。 ここで行を削除すると、コミットは失われます。 ただし、すべてを削除すると、リベースは中断されます。 空のコミットがコメントアウトされていることに注意してください

オプション "d"を使用してコミットを削除するか、コミットした行を削除するだけです。





git-reset