24

私はここでめちゃくちゃになったと思います。

新しい機能を追加するために前回のコミットからコードにいくつかの変更を加えたところ、他のコードの一部が奇妙な動作をしていることに気付きました。その機能がそれまでに機能しているかどうかをテストするために、古いコミット (リモートにもプッシュ) にロールバックすることにしました。

ロールバックを押す前に、現在行っている変更を失いたくないのでコミットしました。コミットした後 (リモートにプッシュしない)、その古いコミットにロールバックしました。(ロールバックしたコミットと今コミットしたコミットの間にかなりの数のコミットがあったことに注意してください)。

すべて正常に機能し、私のコードはそのコミットに戻りました。そのコミットでも機能が正しく動作していなかったため、最新のコミットに戻ることにしました。

ただし、最新のコミットにロールバックする以外は、それを行う方法がわかりませんでした。しかし、それは私にエラーを与えました。

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: revert failed
(32768)

現在、ほとんどのものが戻ってきたようですが、現在のバージョンのコードは前回のコミットと同じではありません。それはその間のどこかにあります。=(

私は何を間違えましたか?[私は無実から尋ねているわけではありません、私はそれが間違っていたことを知っています;)]

それを行う正しい方法は何でしたか?【先に分岐すればよかったと思う】

4

1 に答える 1

32

github for Mac のロールバックが何をするのかはわかりませんが、目前の問題を解決するにはコマンド ラインを使用する方がよいようです。

git cherry-pick --abort- 進行中のチェリーピッキングを停止する

git branch -va- 現在ポインタがどこにあるかを表示します

作業ディレクトリがクリーンであることを確認してください: git status- 変更またはステージングされたファイルを表示しないでください

git stash- 変更されたものがまだ存在する場合

git reset --hard your_local_branch github/remote_branch・リモート側の状態をそのままローカルブランチに反映させる。現在のブランチがリモートと同じコミットを指す場合は、明らかにリセットする必要はありません。デタッチされた HEAD 状態にある場合 (git status で通知されます)、通常の状態に戻るには、ローカル ブランチをチェックアウトするだけです。

次に、実際に達成したいことを決定します。

I.不完全なコミットを取り除きますか?

インタラクティブなリベースを使用して、不完全なコミットのある行を削除してから、github のリモート リポジトリに強制的にプッシュします (不完全なコミットが 10 コミット前に発生したとします)。

git rebase -i HEAD~11

Ⅱ.誤ったコミットを元に戻しますか? - 次のコミットが同じコードに触れていないことを完全に確信していない限り、他のコミットの後にそれを行うことはお勧めしません。これにより、リバース コミットが効果的に作成されます (行が誤ったコミットによって追加された場合、それはリバートによって削除され、その逆も同様です)。

git revert {commit-sha1}

III. 誤ったコミットを修正しますか? インタラクティブなリベースを使用しますが、修正のために誤ったコミットで停止するように指示します。変更の編集を停止してリベースを続行したら、リモート ブランチに強制的にプッシュします (ソリューション I の rebase コマンドを使用します)。

何かが隠されている場合は、完了後に使用git stash popして変更を元に戻します。

それが役立つことを願っています!

于 2012-10-12T18:39:52.797 に答える