Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。
1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。
※前回記事のリポジトリ状態からの続きになっています。
前回記事へ | 目次へ:Git関連記事のまとめページ | 次回記事へ |
---|
実行例
(※始めにコミット履歴状況を確認)
git log --oneline --graph --all
↓
結果:
* 135f847 (HEAD -> branch1) Merge branch 'master' into branch1
|\
| * 60b0341 (master) message12
| * 045a734 message11
| * d10f934 message10
* | 2495cae message7
|/
| * b838160 (branch2) message9
| * c68ef01 message8
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
-----
(※チェリーピックするコミットを選ぶ: branch2 ← master)
git checkout branch2
git log branch2..master --oneline
↓
結果:
60b0341 (master) message12
045a734 message11
d10f934 message10
git show d10f934 --oneline
↓
結果:
d10f934 message10
diff --git a/test1.txt b/test1.txt
index bb7eb1a..ab3d9a7 100644
--- a/test1.txt
+++ b/test1.txt
@@ -2,3 +2,4 @@ Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14
+Sample-Added-110
diff --git a/test10.txt b/test10.txt
new file mode 100644
index 0000000..128c764
--- /dev/null
+++ b/test10.txt
@@ -0,0 +1 @@
+Sample-Added-1010
-----
(※masterのmessage10をbranch2へチェリーピックしてみる)
※チェリーピック(つまみぐい)という部分的なマージ方法
git cherry-pick d10f934
↓
結果:
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
error: could not apply d10f934... message10
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
git status -s
↓
結果:
UU test1.txt
A test10.txt
git diff
↓
結果:
diff --cc test1.txt
index 837e078,ab3d9a7..0000000
--- a/test1.txt
+++ b/test1.txt
@@@ -2,5 -2,4 +2,9 @@@ Sample-Added-1
Sample-Added-12
Sample-Added-13
Sample-Added-14
++<<<<<<< HEAD
+Sample-Added-18
+Sample-Added-19
++=======
+ Sample-Added-110
++>>>>>>> d10f934 (message10)
※Gitは明確に分かる場合以外は、無理をしてまでコンフリクトを解消しようとはしない。
(※コンフリクトを手動で解消)
echo Sample-Added-11 > test1.txt
echo Sample-Added-12 >> test1.txt
echo Sample-Added-13 >> test1.txt
echo Sample-Added-14 >> test1.txt
echo Sample-Added-18 >> test1.txt
echo Sample-Added-19 >> test1.txt
echo Sample-Added-110 >> test1.txt
type test1.txt
↓
結果:
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14
Sample-Added-18
Sample-Added-19
Sample-Added-110
git add .
git status -s
↓
結果:
M test1.txt
A test10.txt
git cherry-pick --continue --no-edit
↓
結果:
[branch2 7fdeb04] message10
Date: Sun Jan 1 19:07:22 2023 +0900
2 files changed, 2 insertions(+)
create mode 100644 test10.txt
git log --oneline --graph --all
↓
結果:
* 7fdeb04 (HEAD -> branch2) message10
* b838160 message9
* c68ef01 message8
| * 135f847 (branch1) Merge branch 'master' into branch1
| |\
| | * 60b0341 (master) message12
| | * 045a734 message11
| | * d10f934 message10
| |/
|/|
| * 2495cae message7
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
-----
(※もう1つ、masterのmessage12をbranch2へチェリーピックしてみる)
git show 60b0341 --oneline
↓
結果:
60b0341 (master) message12
diff --git a/test10.txt b/test10.txt
index 166cf2a..002832f 100644
--- a/test10.txt
+++ b/test10.txt
@@ -1,2 +1,3 @@
Sample-Added-1010
Sample-Added-1011
+Sample-Added-1012
※チェリーピック(つまみぐい)という部分的なマージ方法
git cherry-pick 60b0341
↓
結果:
Auto-merging test10.txt
CONFLICT (content): Merge conflict in test10.txt
error: could not apply 60b0341... message12
git status -s
↓
結果:
UU test10.txt
git diff
↓
結果:
diff --cc test10.txt
index 128c764,002832f..0000000
--- a/test10.txt
+++ b/test10.txt
@@@ -1,1 -1,3 +1,6 @@@
Sample-Added-1010
++<<<<<<< HEAD
++=======
+ Sample-Added-1011
+ Sample-Added-1012
++>>>>>>> 60b0341 (message12)
※Gitは明確に分かる場合以外は、無理をしてまでコンフリクトを解消しようとはしない。
(※コンフリクトを手動で解消)
echo Sample-Added-1010 > test10.txt
echo Sample-Added-1012 >> test10.txt
type test1.txt
↓
結果:
Sample-Added-1010
Sample-Added-1012
git add .
git status -s
↓
結果:
M test10.txt
git cherry-pick --continue --no-edit
↓
結果:
[branch2 f3ef64d] message12
Date: Sun Jan 1 20:00:00 2023 +0900
1 file changed, 1 insertion(+)
git log --oneline --graph --all
↓
結果:
* f3ef64d (HEAD -> branch2) message12
* 7fdeb04 message10
* b838160 message9
* c68ef01 message8
| * 135f847 (branch1) Merge branch 'master' into branch1
| |\
| | * 60b0341 (master) message12
| | * 045a734 message11
| | * d10f934 message10
| |/
|/|
| * 2495cae message7
|/
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
-----
git log branch2..master --oneline
↓
結果:
60b0341 (master) message12
045a734 message11
d10f934 message10
(※チェリーピックしたコミットmessage10・message12は異なるSHA値となる)
(※チェリーピックしたコミットmessage10・message12は、branch2..masterのlog表示時に、除外されるわけではない)
git log master..branch2 --oneline
↓
結果:
f3ef64d (HEAD -> branch2) message12
7fdeb04 message10
b838160 message9
c68ef01 message8
環境
Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。