Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。
1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。
※前回記事のリポジトリ状態からの続きになっています。
前回記事へ | 目次へ:Git関連記事のまとめページ | 次回記事へ |
---|
実行例
引数 (レポジトリ、ブランチ)を省略し「上流ブランチ」を取り込む
https://www-creators.com/archives/2295#git_pull-3
-----
(※試行用にlocal-repo3を作成)
cd /test-space
mkdir local-repo3
cd /test-space/local-repo3
git init
git remote add origin "D:/test-space/remote-repo1.git"
git log
↓
結果:
fatal: your current branch 'master' does not have any commits yet
-----
※全て取得
git pull
↓
結果:
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 27 (delta 5), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (27/27), 2.03 KiB | 2.00 KiB/s, done.
From D:/test-space/remote-repo1
* [new branch] branch-R1 -> origin/branch-R1
* [new branch] branch-R2 -> origin/branch-R2
* [new branch] master -> origin/master
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
git log --oneline --graph --all
↓
結果:
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
(※ローカルブランチが無いので、ローカルブランチをマージして進める処理は実施されない。fetch取得だけ)
-----
(※checkoutでローカルブランチを作成してpullを試行)
git checkout master
↓
結果:
Already on 'master'
branch 'master' set up to track 'origin/master'.
git branch -vv -a
↓
結果:
* master 1247fa9 [origin/master] message R4
remotes/origin/branch-R1 e009b2d message R2
remotes/origin/branch-R2 fab68d8 message R3
remotes/origin/master 1247fa9 message R4
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
git pull
↓
結果:
Already up to date.
(※ローカルブランチの位置を過去に戻してpullを試行すると)
git reset --hard 00cad71
↓
結果:
HEAD is now at 00cad71 message2
git log --oneline --graph --all
↓
結果:
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (HEAD -> master) message2
* 4ace194 message1
※ローカルブランチを進める処理を実施
git pull
↓
結果:
Updating 00cad71..1247fa9
Fast-forward
test1.txt | 5 +++++
test2.txt | 2 +-
test4.txt | 1 +
3 files changed, 7 insertions(+), 1 deletion(-)
create mode 100644 test4.txt
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
(※masterローカルブランチを進める処理が実施されている)
-----
(※新規に単独でローカルブランチを作成して、pullを試行)
git branch branch-R1 00cad71
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R1) message2
* 4ace194 message1
git branch -vv -a
↓
結果:
branch-R1 00cad71 message2
* master 1247fa9 [origin/master] message R4
remotes/origin/branch-R1 e009b2d message R2
remotes/origin/branch-R2 fab68d8 message R3
remotes/origin/master 1247fa9 message R4
git pull
↓
結果:
Already up to date.
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R1) message2
* 4ace194 message1
(※ローカルブランチを単独で作成するだけでは、pullによる処理なし)
-----
(※--set-upstream-toでローカルブランチを関連付けてpullを試行)
※--set-upstream-toでローカルブランチを関連付け
git branch -u origin/branch-R1 branch-R1
↓
結果:
branch 'branch-R1' set up to track 'origin/branch-R1'.
git branch -vv -a
↓
結果:
branch-R1 00cad71 [origin/branch-R1: behind 2] message2
* master 1247fa9 [origin/master] message R4
remotes/origin/branch-R1 e009b2d message R2
remotes/origin/branch-R2 fab68d8 message R3
remotes/origin/master 1247fa9 message R4
git pull
↓
結果:
Already up to date.
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R1) message2
* 4ace194 message1
(※--set-upstream-toでローカルブランチを関連付けても、pullによる処理なし)
git pull origin branch-R1
↓
結果:
From D:/test-space/remote-repo1
* branch branch-R1 -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
git pull origin branch-R1 --ff-only
↓
結果:
From D:/test-space/remote-repo1
* branch branch-R1 -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
git pull origin branch-R1 --rebase
↓
結果:
From D:/test-space/remote-repo1
* branch branch-R1 -> FETCH_HEAD
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
error: could not apply 94996a0... message4
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 94996a0... message4
git diff
↓
結果:
diff --cc test1.txt
index f4e41fe,bb7eb1a..0000000
--- a/test1.txt
+++ b/test1.txt
@@@ -1,4 -1,4 +1,8 @@@
Sample-Added-11
Sample-Added-12
Sample-Added-13
++<<<<<<< HEAD
+Sample-Added-R2
++=======
+ Sample-Added-14
++>>>>>>> 94996a0 (message4)
(※上記「94996a0 message4」と「e009b2d message R2」のコミット履歴をマージしようとしており、
現在チェックアウトしているmasterに、origin/branch-R1をマージするようなpullの動作となる模様)
git rebase --abort
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R1) message2
* 4ace194 message1
-----
(※pullしたいローカルブランチをcheckoutすると、ブランチが最新側へ進んで成功)
git checkout branch-R1
↓
結果:
Switched to branch 'branch-R1'
Your branch is behind 'origin/branch-R1' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
git pull
↓
結果:
Updating 00cad71..e009b2d
Fast-forward
test1.txt | 2 ++
test2.txt | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
git log --oneline --graph --all
↓
結果:
* 1247fa9 (origin/master, master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (HEAD -> branch-R1, origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
(※pullしたいローカルブランチをcheckoutすると、ブランチを進める処理が実施されている)
-----
(※--allで、全てのブランチをpull)
[Git]全てのブランチを同時に pull する方法
https://codelab.website/git-all-branch-pull/
(※pullする前に戻す)
git checkout master
git reset --hard 00cad71
git branch -f branch-R1 00cad71
git branch branch-R2 00cad71
git log --oneline --graph --all
↓
結果:
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (HEAD -> master, branch-R2, branch-R1) message2
* 4ace194 message1
git branch -vv -a
↓
結果:
branch-R1 00cad71 [origin/branch-R1: behind 2] message2
branch-R2 00cad71 message2
* master 00cad71 [origin/master: behind 5] message2
remotes/origin/branch-R1 e009b2d message R2
remotes/origin/branch-R2 fab68d8 message R3
remotes/origin/master 1247fa9 message R4
※全てをpull
git pull --all
↓
結果:
Updating 00cad71..1247fa9
Fast-forward
test1.txt | 5 +++++
test2.txt | 2 +-
test4.txt | 1 +
3 files changed, 7 insertions(+), 1 deletion(-)
create mode 100644 test4.txt
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R2, branch-R1) message2
* 4ace194 message1
(※チェックアウト中のmasterしかpullされていない)
-----
(※上記のチェックアウトをせずにマージする(進める)には、fetchで可能)
(※branch-R1をpullする前に戻す)
git checkout master
git branch -f branch-R1 00cad71
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R1) message2
* 4ace194 message1
git fetch origin branch-R1:branch-R1
↓
結果:
From D:/test-space/remote-repo1
00cad71..e009b2d branch-R1 -> branch-R1
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
(※masterをチェックアウト中に、branch-R1ブランチを進める処理が実施されている)
-----
(※上記のチェックアウトをせずにマージする(進める)には、fetchで可能、"."指定版)
(※branch-R1をpullする前に戻す)
git checkout master
git branch -f branch-R1 00cad71
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R1) message2
* 4ace194 message1
git fetch . origin/branch-R1:branch-R1
↓
結果:
From .
00cad71..e009b2d origin/branch-R1 -> branch-R1
git log --oneline --graph --all
↓
結果:
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
(※masterをチェックアウト中に、branch-R1ブランチを進める処理が実施されている)
-----
(※local-repo3を削除)
cd /test-space
rd /s /q "/test-space/local-repo3"
環境
Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。