触ってて気づいたこと・分かったことをまとめます。
チェックアウトするとファイルのタイムスタンプが、チェックアウトした日時に変わる。
なんでチェックアウトする度にタイムスタンプが変わるんだろう…って思ってたけど分かった気がする。
git checkout [branch]
ってブランチを切り替える作業のことだけど、これってつまり「リポジトリから対象のブランチのファイルを取り出して上書きする」ってことだからタイムスタンプが変わるんだ!と気づいた。
リモートリポジトリに複数のブランチが在っても、クローン時はmasterブランチしか作成されない
例えば、以下のようにリモートリポジトリにはmasterブランチとdevelopブランチが在るけど、まだローカルリポジトリが無い場合。
リポジトリ | masterブランチ | developブランチ |
---|---|---|
リモートリポジトリ | ○ | ○ |
ローカルリポジトリ | × | × |
この状態でgit clone
してもmasterブランチしか取り込まれない。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2
$ git clone http://localhost:8888/group1/prj1.git
Cloning into 'prj1'...
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 34 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (34/34), done.
↑クローン完了。
↓ブランチの一覧を表示してみる。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj1 (master)
$ cd prj1/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
実行結果を確認するとローカル側はmasterブランチしかない。
けどリモート側にはdevelopブランチが在ることが確認できる。
つまりリモートのリポジトリ情報(履歴情報)は取得できているわけだ。
なのでdevelopブランチが欲しければ以下のコマンドを実行すれば良い。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj1 (master)
$ git checkout -b develop origin/develop
Switched to a new branch 'develop'
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
↑developブランチの作成完了。
↓ブランチの一覧とlsの結果を見てみる。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj1 (develop)
$ git branch -a
* develop
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj1 (develop)
$ ls
20181231.md README.md
ふむ。問題なさそうだ。
チェックアウト時にuse "git push" to publish your local commits
というメッセージが表示される場合
ローカルブランチをチェックアウトしたとき、たまに以下のようにuse "git push" to publish your local commits
と表示されることがある。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj1 (master)
$ git checkout develop
Switched to branch 'develop'
Your branch is ahead of 'origin/develop' by 1 commit.
(use "git push" to publish your local commits)
これはリモートリポジトリの追跡ブランチに対してローカルリポジトリのブランチがコミットされている場合に表示されるメッセージで、
この場合、ローカルリポジトリのブランチは、リモートリポジトリの追跡ブランチよりも一歩先を行っていることを指します。
この状態であればgit push
を行ってもコンフリクトが発生することはありません。
但しこのメッセージはgit fetch
している前提。git fetch
していない場合はローカルリポジトリのブランチの方に変更があってもこのメッセージは表示されない。