1. ホーム
  2. git

[解決済み] git push」の取り消し

2022-03-14 16:49:46

質問

以下は、私の 安定したはずの というブランチがあります。

% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
  refs/
  refs/heads/
  refs/tags/
  refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
  from cc4b63bebb6e6dd04407f8788938244b78c50285
  to   83c9191dea88d146400853af5eb7555f252001b0
    done
'refs/heads/unstable': up-to-date
Updating remote server info

後で気がついたことですが、これはすべて間違いでした。このプロセスをすべて取り消し、alpha-0.3.0ブランチを元の状態に戻したいと思います。

どうすればいいのでしょうか?

解決方法は?

このリポジトリの他のユーザーが不正な変更を取得したり、削除したいコミットの上に構築しようとしたりしていないことを確認する必要があります。なぜなら、あなたは歴史を巻き戻そうとしているからです。

それから、古いリファレンスを「強制」プッシュする必要があります。

git push -f origin last_known_good_commit:branch_name

または、あなたの場合

git push -f origin cc4b63bebb6:alpha-0.3.0

をお持ちの方もいらっしゃるかと思います。 receive.denyNonFastForwards をリモートリポジトリに設定します。もしそうなら、次のフレーズを含むエラーが発生します。 [remote rejected] .

このシナリオでは、ブランチを削除して再作成する必要があります。

git push origin :alpha-0.3.0
git push origin cc4b63bebb6:refs/heads/alpha-0.3.0

これがうまくいかない場合 - おそらく、あなたが receive.denyDeletes が設定されている場合、リポジトリに直接アクセスする必要があります。リモートリポジトリでは、次のようなplumbingコマンドを実行する必要があります。

git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8