私はthis文書の後に、すでにプッシュされたコミットメッセージを修正していました。私は今、修正されたメッセージを含む私のローカルブランチと、修正されたメッセージに続くすべてのコミットのコピーを持っています。古いプッシュコミットメッセージを修正するのは安全ですか?
他の人が既にそのコミットを引っ張っていることは確かです。
ローカル支店を押しても安全ですか?他の人にとってどんな結果になるでしょうか?
私はthis文書の後に、すでにプッシュされたコミットメッセージを修正していました。私は今、修正されたメッセージを含む私のローカルブランチと、修正されたメッセージに続くすべてのコミットのコピーを持っています。古いプッシュコミットメッセージを修正するのは安全ですか?
他の人が既にそのコミットを引っ張っていることは確かです。
ローカル支店を押しても安全ですか?他の人にとってどんな結果になるでしょうか?
を修正した場合、コミットすると、そのブランチの履歴が書き換えられたことを意味します。コミットメッセージを変更するだけで、Gitは古いものの代わりにという新しいを作成したことに注意してください。私はあなたがインタラクティブ・リベース、フィルター・ブランチ、またはgit commit --amend
を使用したかどうかはわかりませんが、状況をそれほど変えません。
このブランチをプッシュすると、このブランチを使用している他のすべてのユーザーが、プルしようとするとマージコミットが発生する可能性があります。この理由は、次の図で見ることができます。
同僚の1を引くしようとremote: A -- B -- C -- E # you rewrote D to C
local: A -- B -- D -- E
、GitはB
は、ローカルとリモートのブランチ間の共通の祖先であるとしてコミットでしょう。最初にローカルブランチをC -- E
で早送りしようとしますが、ローカルブランチが分岐し、独自のコミットセットがB
の上にあるため、これも不可能であることに気付きます。その結果、Gitはリモートからの変更とマージコミットを作成します。しかし、これにはコミットC
とD
が含まれ、奇妙なことが起こる可能性があります。
唯一の例外はコミットB
またはそれ以前のブランチを引っ張っていない人です。この場合、そのような人は、そのコミットを書き直したことに気付かないでしょう。なぜなら、彼の地元の歴史は、最初にこのコミットについて知りませんでしたからです。
注意続行したい場合は、あなたの同僚は、この操作が必要になりますが:
git fetch origin # update tracking branches
git reset --hard origin/master # reset local master to remote (effectively overwrite)
メッセージを修正するには遅すぎます。私はそれで生きることができます。 – Elist
@Elistあなたは確かにメッセージを変更できますが、あなたのチームに知らせる必要があります。あなたが十分に緊密な陰謀をしているなら、あなたは歴史を書き直してそれを取り去ることができます。しかし、一般的には、公開されているブランチの履歴を書き換えないようにする必要があります。 –
私は実際にそれを実際には得られません - どうしてgitはメッセージへのシームレスな修正を容易にすることができません。そのような変更は害を及ぼさないため、早送りとみなすことができ、リポジトリを取得すると適用されます。 – Elist
さて、この文書に記載されているメッセージはかなり明確である: 'いずれかがすでに中央サーバーにプッシュしているコミットしないでください - それは他の人々を倒すだろう。それじゃない? – ckruczek