#author("2021-05-05T05:56:10+09:00","default:ryuichi","ryuichi")
#author("2021-05-05T05:56:28+09:00","default:ryuichi","ryuichi")
* git push --forceを行う例 [#k30ad3af]

** 2人で同じブランチを開発している場合 [#kebe31d6]

 [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を活かす場合 [#v3cbf174]

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

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

 [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