2

git プロジェクトに問題があります。

  • 不正な変更がリモート リポジトリにプッシュされました
  • 1 台のマシンはpull悪い変更を -ed していませんが、ローカルの変更をコミットしていません

リモートリポジトリから悪い変更を取り除き、良い変更をプッシュしたいと考えています。

私たちは git の経験があまりないので、git を台無しにして、コミットされていない適切な変更を失うことを恐れています。git revertor git rebase(または何か他のもの)を使用する必要があるかどうか、およびどのコンピューターから (つまり、適切な変更が行われていないコンピューターから) を使用する必要があるかはわかりません。

4

1 に答える 1

3

最初に:慌てる必要はありません

これはリビジョン管理システムです。情報を簡単に失うことがないように存在します。

いつでも最初に作業を保存できます。

git checkout -b RESCUE_THIS
git add .
git commit -am 'Do not loose this commit!'

そこからそれを取ります。

私は提案します:

  1. 悪いコミットを元に戻す

    • git reset HEAD @ {1}#最後のコミットの場合

      どの変更を保持したいかを考え出し、それらを新しいコミットにコミットする可能性があります。'HEAD @ {1} gitlog`を見つけるために使用することに注意してくださいgit reflogpart that you want. Take your time as this can be a bit confusing when comparing to

    • git revert bad-commit-id#そうでなかった場合

      で元に戻すリビジョンを見つけることに注意git logしてください。複数のコミットを元に戻すことができます。時系列の逆順にそれらを元に戻します。それぞれの復帰は、そのコミットからのチャンスを「元に戻す」新しいコミットをもたらします。
      たくさんのコミットを元に戻していることに気付いた場合は、代わりにリベースすることをお勧めします。

  2. 固定ブランチを中央リポジトリに強制的にプッシュします

    • git push -f#おそらくブランチを指定します:origin masterまたは同様のもの
  3. 残りの作業を「適切な」クライアントから復元します。

    • git checkout master#RESCUE_THISからスイッチバック

    • git merge --no-commit --ff RESCUE_THIS

    • git commit -am

    • 結果に本当に満足している場合はgitpush#

その時までに、RESCUE_THISブランチを削除することを選択できます。そうしたとしても、reflogが期限切れになるまで実際には消えません。

免責事項:上記のすべては、セットアップ、ブランチ履歴、ワークフロー、および特定の障害シナリオに関する前提条件に満ちています。安心してください、彼らは知識に基づいた推測であり、ほとんどの場合、一般的な慣行と一致しています。ただし、目を開いたまま、自分で考えてみてください。最後の手段として、安全のために「適切なクライアント」でgitリポジトリの物理バックアップを取ることができます

于 2011-10-31T15:00:36.813 に答える