Gitが初めての人にとって、Gitにおけるコミットを理解するのは少し難しいです。
コミットを理解すれば、Pushしたときになぜエラーが起こるのかわかるようになります。
このエントリでは図を多用しながら、Gitにおける「コミット」と「コミットの修正」について説明します。
![Image in a image block](/_astro/0497a506-d6fe-4165-82d9-fb49fe602be6.BDyJN6JF_1s9jrv.webp)
コミットは、なんらかの変更(差分)のひとまとまりです。
コミットには固有のIDが自動で割り振られます。
この固有のIDは、40桁のランダムな英数字で、そのパターンは世界中の砂つぶの数よりも多いと言われています。
Gitはこの固有のIDによってコミットが同じかどうかを識別します。
![Image in a image block](/_astro/3c687080-c360-4b1e-add4-5030bfcd71bd.CJqaSRt2_1BtBLO.webp)
このコミット固有のIDのことを「コミットID」と呼びます。
コミットIDは、ブランチをローカルからリモートにPushしても変わることはありません。
コミットIDは変わるケースがあります。
先ほど、コミットIDはコミットごとに固有のものと説明しました。
というのも、コミットし直したり、コミットの順番を並べ替えたりするとコミットIDが変わる(=別コミットになる)からです。
![Image in a image block](/_astro/66b397bf-639d-4265-9a89-0edae07a58bc.BkLpRy2t_2szqon.webp)
Gitは、コミットを固有のコミットIDによって見分けていると言いました。
すでにリモートにあるコミットを、ローカルで変更し、再度リモートにPushするとどうなるでしょうか?
![Image in a image block](/_astro/c8fa5728-f2d3-486b-8b1b-ced46a98e485.DULvLMUV_Z1CkeEm.webp)
リモートではcccの次はdddになっているのに、ローカルではcccの次はddd'になっています。
これでは辻褄が合いません。
このときerror: failed to push some refs
というエラーになってしまいます。
Gitを使うにあたって大事なことは、「一度PushしたコミットのIDを変えない」ということです。
慣れないうちは、修正の際にコミットを修正するのではなく、修正を新しいコミットとして追加しましょう。
コミットの修正は、コミットを整理してレビューしやすくできる強力な機能ですが、Gitに慣れるまでは使わなくても良いでしょう。
Gitを使うときは、リモートとローカルの差を頭に入れておき、辻褄を合わせるように意識するということが大切です。
以上です。
このエントリでは図を多用しながら、Gitにおける「コミット」と「コミットの修正」について説明しました。
Gitのブランチとコミットについて図解で復習したい方は、下記の記事が参考になりそうです。
コメントを送る
コメントはブログオーナーのみ閲覧できます