体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

マンガでわかるGit 11話「強制プッシュするとどうなるの?プッシュできないときはどうすべき?」

強制プッシュするとどうなるの?プッシュできないときはどうすべき?

☆ 前回のお話はこちら:「masterブランチを守れ!~危険な強制プッシュ~」


さっきの状態を再現してみたわ。


この状態では何も問題ないわね。


ここでわかばちゃんは、masterブランチの内容を修正しようとして、プッシュ済みのコミットDをコミットXに書き換えてしまった。


そうそう。さっきそれをやっちゃったんだよね。
そしたら、なぜかプッシュできなくなった。
なんで?


その理由は、図で表すとこうよ

◎ 正常にpushできる状態

EはDの子孫

* リモートリポジトリのmasterと、ローカルリポジトリのmasterがきれいな
  親子関係になっている
* = 正常にpushできる

× 普通の方法ではpushできない状態

YはDの子孫じゃない

* リモートリポジトリのmasterの最終コミットと、ローカルリポジトリの
  masterの最終コミットが親子関係になっていない
* = エラーになりpushできない
  (このまま強引にpushするとDが履歴から消滅してしまう)

強制プッシュはなぜダメか

チームで共有しているブランチで、強制プッシュ(push -f)してしまうと、自分はよくても、自分以外のメンバーがプッシュできなくなってしまいます。

2~3人のチームならすぐさま連絡すればどうにかできますが、チームの規模が大きくなればなるほど、被害が増えてしまいます。

強制プッシュが許されるのは、原則「自分しか利用していないリモートブランチだけ」です。

共有しているブランチで修正したくなったら?

1 2 3次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。