web-dev-qa-db-ja.com

以前のコミットへのロールバック-MACのGithub(復帰はすでに進行中)

ここでめちゃくちゃだと思います。

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

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

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

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

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

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

何を間違えたのですか? [私は無罪を求めているのではありません。私はそれを間違ったと知っています;)]

それを行う正しい方法は何でしたか? [最初に分岐するべきだったと思う]

20
tGilani

Macロールバック用のgithubの機能はわかりませんが、問題を解決するにはコマンドラインを使用したほうがよいようです。

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

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

git revert {commit-sha1}

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

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

お役に立てば幸いです。

23
Eugene Sajine