0

エラー(プログラムがコンパイルされていない)でコミットし、作成した後:git push (I)
私の同僚は完了しました:git pull (She) そして、リポジトリのコンパイルされていない状態を取得しました。その後、いくつかのコミットを追加し(プロジェクトのドキュメントについて-コンパイルは重要ではありませんでした)、再度実行しました。git push (She)
その後、リポジトリの状態は次のようになります。

  1. 彼女のコミット
  2. 彼女のコミット
  3. エラーのあるコミット
  4. 私の別のコミット
    は、コミット3を正確に削除したかったのです。
    git-rebase --onto <sha of commit 4> <sha commit 3> master
    git push --force

これで、リポジトリの状態は正しくなりました(commit 3なし)が、他のすべての変更が加えられています。しかし、彼女がそうするなら

git pull
git push

彼女はローカルコミット#3とマージし、それをリポジトリにプルします。git pullの後に誰か(彼女だけでなく)がリポジトリの状態を修正するようにするにはどうすればよいですか?すべての変更がありますが、コミット#3はありませんか?

注: おそらく、彼女は最後にローカルコミットを追加しました(別の場合は機能)。そして、サーバーのリポジトリよりも新しい彼女のローカルリポジトリ。

4

1 に答える 1

0

あなたはパブリックヒストリーの変更に伴う問題を発見しました。変更を見た人は誰でも同じように変更することに同意する必要があります。この単純なケースでは、rebaseあなたが行ったのと同じコマンドを実行することで、新しい適切なバージョンを取得できる可能性があります。

git-rebase --onto <sha of commit 4> <sha commit 3> master

これにより、ローカルマスターが更新され、リモートマスターブランチに再度同意するようになり、通常どおり続行できます。

これを自動的に発生させる方法はありません。master単に追跡していた、またはこのリベースを行ったときに行ったすべての変更をプッシュした人にとって最も簡単な方法は、実行することかもしれませんgit reset --hard origin/masterが、これにより、リベースを行ったときに含まれていなかった現在のブランチで行われたローカルコミットがすべて消去されmasterます

同じことを実現する別の方法は、を使用することですgit revert。これは、別のコミットの逆である新しいコミットを追加するだけです。これは履歴を編集するのではなく、元に戻すような方法で履歴に追加するだけです。これにより、問題のコミットが関連するコマンドに引き続き表示されgit logますが、他のすべての人に問題が発生することはありません。

于 2011-09-27T12:01:00.093 に答える