【Git】git addとgit fetchを今更ながら理解した
エンジニアになる前の学習ではGitHub Desktopを使っていた。
そして、エンジニアになってからはSourceTreeに世話になっている。
gitコマンド及びgit概念についてなんとなくでここまで来ていたが、
Udemyのセールで購入した教材が非常に勉強になり、特に表題のコマンドについて、
これまで完全に間違った理解をしていた。
git add
ローカルのワークツリーでファイル変更した後は、
ローカルリポジトリにcommit、リモートリポジトリにpushするんでしょ、と言う理解だった。
ファイル変更後
→ commit
→ push
でも実際はステージと言う段階があって、
ワークツリーからステージへaddして、ステージからリポジトリにcommitされるのが正解だった。これが始めからGUIを使っていると抜け落ちる。
ファイル変更後
→ add
→ commit
→ push
ファイル変更後にaddすると、addしたファイルを圧縮したものが.git/objects以下に保存される。これだけではなく、圧縮ファイルと元ファイルの紐付けの為にファイルの構造と名前を保持するインデックスが.git/indexと言うバイナリファイルで管理されている。
この辺のデータ構造も理解すると、この後のcommitからpushまでの流れも理解しやすかった。
git fetch
リモートブランチをローカルブランチに引っ張って来るんでしょって理解だったが、これでは不十分だ。
よく、pushの反対はpullではなくfetchだ、と言われるのだけど、
これで勉強するまでmergeについての理解もあやふやだったと知り悲しくなった。
そもそもpullはfetchしてmergeするもの。
mergeはブランチをくっつけるイメージだったけど、取り込むと言う方が正しい。
で、fetchはリモートリポジトリから最新をローカルリポジトリに持ってくるもの。
またfetchしてきたorigin/masterとmasterは別であり、fetchしてきたリモートブランチの内容を反映するにはmergeしないといけないと言う話。
なんでもかんでもpullが危険と言うのは、masterにいる時にmergeしたくないブランチをpullしちゃったりとかそう言う事なのだけど、これは確かにコマンドラインでは起こり得るのかなと思う。(SourceTreeとか使ってたらまず起こらないと思うけど)
Author And Source
この問題について(【Git】git addとgit fetchを今更ながら理解した), 我々は、より多くの情報をここで見つけました https://qiita.com/shin_moto/items/3041341febde01b76cd8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .