ロールバックされた古いバージョンのコードと変更されたファイルを github のメイン ブランチに送信する方法
巴扎黑
巴扎黑 2017-06-16 09:19:00
0
2
1178

私が言ったことはあまり明確ではないかもしれませんが、コードを書いているときに、もうやりたくないことがわかったので、git replace --hard <versionnumber> を使用しました。前のバージョンに戻るには、バージョンを書き直して、書き終えてリモート ウェアハウスに送信したいときにエラーが報告されるようにします。 リーリー

私のバージョンは前のバージョンで、マージして送信してほしいと言われましたが、どうすればよいでしょうか?何度か試しましたが、まだ理解できません。

巴扎黑
巴扎黑

全員に返信(2)
黄舟

まず第一に、あなたの説明によると、あなたはgit reset --hard,那就可以推断出你已经 addcommit 过了。
其次,根据报错,可以推断出你已经 pushを使用しているため(この推論は、あなただけがマスターブランチの変更権限を持っているという事実に基づいています。

その後、git reset --hardを実行すると、履歴レコードをリモート レコードと直接マージすることはできません。それがこのエラーが発生する理由です。

たとえば、リモートは A -> B -> C -> D,你 git reset --hard 之后是 A -> B。这时候除非远程那边抹掉 CD で、

の後に A -> B が続きます。このときリモート側でCDを消去しないとマージできません。

git push origin master --forceそのため、現時点ではを使用してリモートレコードを強制的に上書きする必要があります。

git pull。否则,你的本地又会变成 A -> B -> C -> D。因为 git pull 相当于 git fetch + git merge指示に従って使用しないでください


A -> B -> C -> D (以下の内容は上記の例に基づいており、リモートは

であり、状態 B にロールバックしたいと考えています)

git revert。其实,git reset --hardgit revertgit revert については上の階で説明しました。実際、

git revert の両方で「コードのロールバック」を実現できます。しかし、違いは次のとおりです:

git revert 会把你的本地变成 A -> B -> C -> D -> E。其中,E 干的事儿是删除 CD。这样做的好处在于,你 git push origin master 就不会有上面的报错了。但,历史线上还是会保留 CD 这两个 commit。如果使用这个命令,记得要 add 然后 commit

git reset --hard 会直接删掉 CD,形成 A -> B 这样的结果。好处在于更直接更彻底。缺点在于,首先要通过 git push origin master --force 去强行更改。其次,一旦你后悔了,除非根据本地的 reflog

CD を直接削除し、A -> B のような結果を形成します。利点は、より直接的かつ徹底的であることです。欠点は、最初に

を通じて変更を強制する必要があることです。第 2 に、一度後悔したら、ローカルの reflog に基づいて HEAD ポインタを直接復元する以外に方法はありません。

どちらを使用する場合でも、ニーズに応じて選択してください。 🎜🎜
いいねを押す +0
漂亮男人

一般的に、この状況は避けるようにしてください。

リモートマスターへの許可がある場合は、次のことができます:

リーリー

より合理的なアプローチは git revert を使用することです


分割線を編集する

別の学生 @S1ngS1ng はより詳細な回答をしましたが、どれも使用できるという点を指摘しましたが、それでも git revert の方がより適切なアプローチであると強調しました。

複数人による開発シナリオの場合、最新のコードがリモート マスター上で他の人によってプルされているか、他のブランチにマージされている可能性が非常に高くなります。この場合、相手がまだプッシュしている可能性があるため、リセットは無効になります。コミット

を削除したいと思います。

つまり、どれでも使えるというこの考えには実際には限界があります

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート