git push --forceを行う例

2人で同じブランチを開発している場合

 [remote] | C1--C2--C5--C6   origin/feature1
          |      \
 [local]  |       C3--C4     feature1
  • (1) Bobがlocalで作業してC1、C2をコミットしremoteにプッシュした
  • (2) Bobはさらに作業を続けてC3、C4をlocalにコミットしている間に、Aliceが作業しC5、C6をコミットしremoteにプッシュした。Bobはそのことを知らなかった
  • (3) この時、BobがC3、C4をremoteにプッシュするとエラーになる。C5、C6がBobのブランチに含まれないから
  • (4) このような場合、C5、C6を削除してもいいなら、Bobはgit push --forceすればいい

C5、C6を活かす場合

  • 5. git pullしてC5、C6をlocalに取り込んだ後にgit pushする

プッシュ済みのブランチをリベースして再度プッシュする場合

 [remote] | C1--C2--C5--C6   origin/master  (0)
          |      \
 [local]  |       C3--C4     feature1
 git co feature1          (1)
 git rebase master
 git push origin feature1 (2)
  • (0) masterブランチのC2からfeature1ブランチを作って、C3、C4を作ってコミット、プッシュしたが、その間にmasterにC5、C6ができたので、
  • (1) feature1でmasterにリベースしてから、(2) プッシュするとエラーになる

なぜエラーになるのかというと、

 [local]  | C1--C2--C5--C6--C3'--C4' feature1        (3)
          |
 [remote] | C1--C2--C3--C4           origin/feature1 (4)
  • (3) localでリベースするとこのような状態になっているが、このC3'とC4'は、(4) remoteにプッシュ済みのC3とC4とは別のコミットである
  • したがって、この状態でプッシュしたければ、git push --foreceする必要がある

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2021-05-05 (水) 05:56:28