見出し画像

Git/GitHub

●リモートリポジトリでのトピックブランチ削除が、
ローカルリポジトリには反映されないがなぜか。

・仮説

リモートレポジトリでmerge後、トピックブランチを削除。
その後、ローカルでpull作業をした直後。
ローカルリポジトリのBranchタブでは、
リモートで削除したトピックブランチを選択可能。
ただし、DELETEが選べる。

スクリーンショット 2021-08-10 22.41.22

pull = fech + merge
fech = リモートリポジトリの最新の状態を取得
merge = トッピクブランチをmasterブランチに統合

ローカルレポジトリでのpull作業は、
リモートレポジトリの状態をコピーしているというより、
ローカルでもmerge作業を行って
リモートの状態に「合わせにいってる」と予測。
その操作をもって同期してる。(寄せに行ってる)

つまり、やってる作業はmergeなので、ブランチの削除は含まれない。
(pullにdeleteは含まれていない)
だからローカルのトピックブランチは残ってるし、別途deleteが必要。

・質問で深まった内容

なぜmerge前にFetchするのか?
mergeするのは明示なのだから、なぜいちいち確認が必要なのか?

そもそもpullが必要か、Fetchで確認している。
また、リモートに同期するにしても「どん状態」に同期するのか確認が必要。

なのでFetchからのPullという流れになっている。

Fetchが再度行われるが、PullがFetch + mergeなのは仕様なので。


●.DS_Storeと.gitignore_global

アップロードしない設定なのは理解した。
だが、ぞれぞれ何者か。

・調べた結果

.gitignore_globalは、全レポジトリに適応する設定。
.gitignoreは、レポジトリ毎の設定。

つまり、MacOS固有で生成される.DS_storeファイルは
レポジトリ毎に出てくる。

毎度設定するのは面倒で、
どのアプリでもGitで管理する必要はないので
〜globalに、無視して設定をしている。

windowsでも固有ファイルがあったりする。

.gitignore_global、.gitignoreどちらに何を書くのか?
など、こちらの本がわかりやすかった。

何冊かパラパラ立ち読みしたが、
.gitignoreについて言及してても
.gitignore_globalまで触れている書籍が少なかった。

こちらはしっかり説明してくださっていた。


●Publish〜とPushのニュアンスの違い

・仮説

publish repositoryが、
リモートレポジトリ作成+push(ローカルの反映)だったように、
publish branchも、リモートのブランチ作成+pushが含まれていると推測。

また、commitした状態でpublish branchすると
push originのコマンドがなくなり、
リモートにデータは同期していた。

publish branchであり、push branchでないのは、
同期するそのもの(枝)がないので、作成からするというニュアンス。
nullになにもできないように、まず無から有にするのがpublish、
pushは、有になったものを更新していくニュアンスと解釈。

・質問で深まった内容

publish branch、push originと命令ごとに同期がベスト。
仮にcommitを戻したい!と思ったときに
pushしちゃってると手間がかかる。