これが私の 安定しているはずの branchで行ったことです。
% 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
私もあなたがこれをすることができると思います:
git checkout alpha-0.3.0
git reset --hard cc4b63bebb6
git Push Origin +alpha-0.3.0
これは最後の方法と非常によく似ていますが、リモートレポジトリをいじる必要はありません。
git revert
は、ここで提案されているいくつかの方法よりも危険性が少なくなります。
Prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650
[master 71738a9] Revert "Issue #482 - Fixed bug."
4 files changed, 30 insertions(+), 42 deletions(-)
Prompt> git status
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Prompt>
35f6af6f77f116ef922e3d75bc80a4a466f92650を自分のコミットで置き換えてください。
あなたが共有リポジトリで作業している場合、(@ charles baileyからの)受け入れられた解決策は非常に危険です。
ベストプラクティスとして、共有されているリモートレポジトリにプッシュされたすべてのコミットは「不変」と見なされるべきです。代わりに 'git revert'を使ってください: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes
あなたが望んだ変更を失うことなくそれをする方法:
git reset cc4b63b
git stash
git Push -f Origin alpha-0.3.0
git stash pop
それからあなたはあなたがプッシュしようとしているファイルを選択することができます
これを行う別の方法:
git Push Origin --delete <branch_name>
を使用)git Push Origin +7f6d03:master
これはあなたのレポを前述のコミット番号に戻します。
複数のコミットを元に戻すgit reset --hard 0ad5a7a6(コミットSHA1ハッシュを提供するだけ)
最後のコミットを元に戻す
git reset --hard HEAD〜1(最後のコミットへの変更は削除されます)git reset --soft HEAD〜1(最後のコミットへの変更はコミットされていないローカルな変更として利用可能になります)
シナリオ1:最後のコミットを元に戻したい場合は、8123b7e04b3と言うと、以下のようなコマンドになります(これは私にとって役に立ちました)。
git Push Origin +8123b7e04b3^:<branch_name>
出力は以下のようになります。
Total 0 (delta 0), reused 0 (delta 0)
To https://testlocation/code.git
+ 8123b7e...92bc500 8123b7e04b3^ -> master (forced update)
追加情報: シナリオ2:前のコマンドで元に戻したもの(基本的に元に戻す)を元に戻すことをお勧めします。その後、下記のコマンドを使用します。
git reset --hard 8123b7e04b3
出力:
HEAD is now at cc6206c Comment_that_was_entered_for_commit
ここでより多くの情報: https://github.com/blog/2019-how-to-undo-almost-anything-with-git