Gitが初めての人にとって、Gitにおけるコミットを理解するのは少し難しいです。
コミットを理解すれば、Pushしたときになぜエラーが起こるのかわかるようになります。
このエントリでは図を多用しながら、Gitにおける「コミット」と「コミットの修正」について説明します。

コミットは、なんらかの変更(差分)のひとまとまりです。
コミットには固有のIDが自動で割り振られます。
この固有のIDは、40桁のランダムな英数字で、そのパターンは世界中の砂つぶの数よりも多いと言われています。
Gitはこの固有のIDによってコミットが同じかどうかを識別します。

このコミット固有のIDのことを「コミットID」と呼びます。
コミットIDは、ブランチをローカルからリモートにPushしても変わることはありません。
コミットIDは変わるケースがあります。
先ほど、コミットIDはコミットごとに固有のものと説明しました。
というのも、コミットし直したり、コミットの順番を並べ替えたりするとコミットIDが変わる(=別コミットになる)からです。

Gitは、コミットを固有のコミットIDによって見分けていると言いました。
すでにリモートにあるコミットを、ローカルで変更し、再度リモートにPushするとどうなるでしょうか?

リモートではcccの次はdddになっているのに、ローカルではcccの次はddd'になっています。
これでは辻褄が合いません。
このときerror: failed to push some refs
というエラーになってしまいます。
Gitを使うにあたって大事なことは、「一度PushしたコミットのIDを変えない」ということです。
慣れないうちは、修正の際にコミットを修正するのではなく、修正を新しいコミットとして追加しましょう。
コミットの修正は、コミットを整理してレビューしやすくできる強力な機能ですが、Gitに慣れるまでは使わなくても良いでしょう。
Gitを使うときは、リモートとローカルの差を頭に入れておき、辻褄を合わせるように意識するということが大切です。
以上です。
このエントリでは図を多用しながら、Gitにおける「コミット」と「コミットの修正」について説明しました。
Gitのブランチとコミットについて図解で復習したい方は、下記の記事が参考になりそうです。
コメントを送る
コメントはブログオーナーのみ閲覧できます