0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Git] 動作を試す 実行例33:cherry-pickで一部のコミットをマージする

Posted at

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等は不使用。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?