SESOSe
2026-07-10|読了 約1分トラブル対応信頼

共有した履歴は書き換えない——force pushの前に思い出すこと

この記事はSESで働く人の話です。いまのあなたの現在地は、3分の自己診断で測れます。無料・登録不要です。

「force pushしたら、他の人のコミットが消えました」——常駐先のGit事故で、いちばん青ざめる報告のひとつです。

共有された履歴は、もう他人の手元にある

共有ブランチに対して rebase をしてはいけないのは、rebase がコミットを作り直す(IDが変わる)操作だからです。自分のローカルブランチなら整理されるだけですが、共有ブランチでやると、同じ変更が別のコミットとして二重に見え、他の人が pull した瞬間に食い違いが起きます。共有された履歴は、他人の手元にもう存在していることを忘れると事故になります。

消すのではなく、打ち消す

すでに push したコミットを取り消したいときも同じ発想です。書き換えて force push するのではなく、revert で打ち消すコミットを新しく積みます。これなら誰の手元とも矛盾しません。消すのではなく、消したという事実を歴史として残す、という考え方です。

どうしても force push が必要なら

どうしても force push が要る場面もあります。そのときは --force ではなく --force-with-lease を使います。--force は相手のコミットを問答無用で消しますが、--force-with-lease は「自分が最後に見た状態から変わっていなければ」という条件付きで、知らない間に誰かが push していたら失敗して止まります。人の記憶で気をつけるのではなく、機械に止めさせるという発想です。

事故ったときの態度が、次の信頼を分ける

万一事故が起きたときの振る舞いは、火事場で信頼される人が、静かにやっていることに近い話です。わかっていることとわかっていないことを分けて共有し、進捗を聞かれる前に出す。Gitの事故でも、この2つは同じように効きます。

共有履歴に関わる判断は、エンジニアの型の問題集にまとめてあります。

この記事は役に立ちましたか?

あなたの現在地、確かめてみませんか?

3分の自己診断(14問)で、いまの見立てとこれからの一手がわかります。

自己診断をやってみる

この記事、誰かの顔が浮かびましたか

エンジニア仲間に

これ読んだ、けっこう刺さった 「共有した履歴は書き換えない——force pushの前に思い出すこと」 https://sesos.jp/e/articles/kyouyuu-rireki-wo-kakikaenai

同じ現場の人に

現場の話として分かるなと思った記事です 「共有した履歴は書き換えない——force pushの前に思い出すこと」 https://sesos.jp/e/articles/kyouyuu-rireki-wo-kakikaenai