1859

「誤って」コミットを GitHub にプッシュしてしまいました。

このコミットを削除することは可能ですか?

このコミット前の GitHub リポジトリを元に戻したいです。

4

21 に答える 21

1350

注:以下のコメントで代替案を参照してくださいgit rebase -i—</p>

git reset --soft HEAD^

まず、ローカル リポジトリのコミットを削除します。を使用してこれを行うことができますgit rebase -i。たとえば、これが最後のコミットである場合はgit rebase -i HEAD~2、ポップアップするエディター ウィンドウ内の 2 行目を実行して削除できます。

次に、を使用して GitHub に強制的にプッシュします。git push origin +branchName --force

詳細については、Git Magic Chapter 5: Lessons of History - And Then Someを参照してください (つまり、古いコミットを削除したい場合)。

ああ、作業ツリーが汚れている場合は、git stash最初に実行してから後で実行する必要がありますgit stash apply

于 2009-01-15T23:24:03.400 に答える
1049
git push -f origin HEAD^:master

それはプッシュを「元に戻す」必要があります。

于 2009-01-16T00:11:01.683 に答える
437

それが単なる間違いである場合に簡単に元に戻すには (おそらく、リポジトリをフォークしてから、新しいリポジトリではなく元のリポジトリにプッシュすることになった可能性があります)、別の可能性があります。

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

明らかに、その番号を、戻りたいコミットの番号に置き換えます。

もう一度押すと、それ以降のすべてが削除されます。そのためには、次のステップは次のようになります。

git push --force
于 2014-04-21T20:26:33.600 に答える
136
  1. git log 元に戻したいコミットを見つける

  2. git push origin +7f6d03:master 7f6d03 は、誤ってプッシュされたコミットの前のコミットです。 +だったforce push

以上です。

これは、あなたの問題を簡単かつシンプルに解決する非常に優れたガイドです!

于 2016-02-09T11:58:15.887 に答える
41

キャッシュを完全に消去するには、キャッシュをクリアする必要があります。git のこのヘルプ ページが役に立ちます。(それは私を助けました) http://help.github.com/remove-sensitive-data/

于 2011-07-27T22:38:42.777 に答える
30
1. git reset HEAD^ --hard
2. git push origin -f

これは私にとってはうまくいきます。

于 2016-08-10T08:41:55.523 に答える
21

元に戻したいコミットのコミット ハッシュを知る必要があります。https://github.com/your-organization/your-project/commits/masterのような GitHub URL から取得できます。

コミットからのハッシュ(戻りたい場所)が「99fb454」(長いバージョン「99fb45413eb9ca4b3063e07b40402b136a8cf264」)であるとしましょう。

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
于 2016-12-20T14:21:29.907 に答える
11

Github でブランチのヘッドにするコミットの ref 仕様を見つけ、次のコマンドを使用します。

git push origin +[ref]:[branchName]

あなたの場合、1 つのコミットだけに戻りたい場合は、そのコミットの参照の先頭を見つけます。たとえば、それは 7f6d03 であり、変更したいブランチの名前は、たとえば master であるとします。以下をせよ:

git push origin +7f6d03:master

プラス記号は として解釈され--forceます。これは、履歴を書き換えるために必要になります。

--forceコミットするたびに、ブランチをマージした他の人の履歴を書き換える可能性があることに注意してください。ただし、(他の誰かがあなたのブランチをマージする前に) 問題をすばやく見つければ、問題は発生しません。

于 2015-06-22T10:36:58.730 に答える
8

コミットに機密データがあるためにこれを行っている場合、ここで他の回答を使用することは安全ではありません(詳細を説明する subutux を除く)。

これに関するgithub ガイドでは、外部ツールの使用を推奨していますが、私は組み込みツールを使用することを好みます。

まず、リポジトリのバックアップを作成します。それで:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

この後、リポジトリが目的の状態であることを確認します。バックアップと比較したい場合があります。

それが正しいと確信している場合は、次のようにします。

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

念のため、ローカル バックアップをしばらく保持しておくことをお勧めします。

于 2017-01-02T14:01:18.187 に答える
2

最初にローカルの変更を横のどこかに保存します(バックアップ)

最近のコミットを参照し、[完全な SHA をコピー] ボタンをクリックしてコミット ハッシュを選択し、クリップボードに送信できます。

最後のコミット ハッシュが g0834hg304gh3084gh の場合 (例)

実行する必要があります:

git push origin +g0834hg304gh3084gh:master

以前にコピーしたハッシュを使用して、「HEAD」リビジョンにします。

必要なローカル変更を追加します。終わり ;)

于 2016-02-08T13:37:00.830 に答える
0

歴史を書き直すのはあまり良くありません。を使用git revert <commit_id>すると、上記のコミット ID のクリーンなリバースコミットが作成されます。

この方法では、履歴が書き直されることはなく、元に戻されたことを誰もが知ることができます。

于 2014-07-17T12:44:24.550 に答える