0
0

Git ブランチとマージ

Posted at

マージ・コンフリクト時各種コマンドの備忘録
・Automatic merge
・git diff
・git log --graph

■Automatic mergeとは

各コミットが異なる箇所を変更している場合、自動でマージしてくれる機能。
マージするブランチ同士がぶつからないケース。
逆にマージするブランチのファイルの差分が同じ場所だとGitがどちらのブランチの差分を採用すればいいかわからない(=Merge Conflict)

コミットが各ブランチで枝分かれしている場合、git logコマンドで他のブランチの情報が出てこない 
※↓mainブランチのログしか表示されず、no-fast-fowardブランチが表示されない。

$ git log --oneline
8112ceb (HEAD -> main) make new file for automatic merge
1329e82 update readme
47a43df (origin/main, origin/HEAD) add gitignore
3282559 new file
6bb1377 delete file
ee0dfb8 make new file
728c928 changed name2
70d2c42 change name
c1632c9 add newfile
b52de06 Initial commit

この場合、「--all」を追加する」。
↓でno-fast-fowardブランチの情報も確認可能に

$ git log --all --oneline
8112ceb (HEAD -> main) make new file for automatic merge
377f6db (no-fast-forward) update readme for automatic merge
1329e82 update readme
47a43df (origin/main, origin/HEAD) add gitignore
3282559 new file
6bb1377 delete file
ee0dfb8 make new file
728c928 changed name2
70d2c42 change name
c1632c9 add newfile
b52de06 Initial commit

更に「--graph」を追加すると、コミットの親子関係を可視化してくれる※枝分かれしてるのがわかりやすい。

$ git log --all --oneline --graph
* 8112ceb (HEAD -> main) make new file for automatic merge
| * 377f6db (no-fast-forward) update readme for automatic merge
|/
* 1329e82 update readme
* 47a43df (origin/main, origin/HEAD) add gitignore
* 3282559 new file
* 6bb1377 delete file
* ee0dfb8 make new file
* 728c928 changed name2
* 70d2c42 change name
* c1632c9 add newfile
* b52de06 Initial commit

mergeする前に、差分の確認

$ git diff main no-fast-forward
diff --git a/README.md b/README.md
index bb97474..4c373cd 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
 # git-practice
 このリポジトリはGit動画講座用です.
 ローカルリポで変更  
-new-featureブランチで変更
\ No newline at end of file
+no-fast-branchでブランチで変更
\ No newline at end of file
diff --git a/newfile.txt b/newfile.txt
deleted file mode 100644
index 6704adb..0000000
--- a/newfile.txt
+++ /dev/null
@@ -1 +0,0 @@
-created new file!
\ No newline at end of file

差分を見て問題なければ、mergeしていく

Merge

mainのブランチに移動し、mergeしたいブランチを指定してgit mergeコマンドを入力

git merge no-fast-forward
Merge made by the 'ort' strategy.
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

上記コマンドでデフォルトのエディタが開き、コミットメッセージを入力を求められるが、自動で記述されているのでメモ不要でクローズ

image.png

git logで確認

$ git log --oneline --all --graph
*   d1dc2b0 (HEAD -> main) Merge branch 'no-fast-forward'
|\
| * 377f6db (no-fast-forward) update readme for automatic merge
* | 8112ceb make new file for automatic merge
|/
* 1329e82 update readme
* 47a43df (origin/main, origin/HEAD) add gitignore
* 3282559 new file
* 6bb1377 delete file
* ee0dfb8 make new file
* 728c928 changed name2
* 70d2c42 change name
* c1632c9 add newfile
* b52de06 Initial commit

現状の親子関係は以下グラフのようになっている。
image.png

mergeできたこと確認したら、不要なブランチ(no-fast-branch)を削除

$ git branch
* main
  no-fast-forward
~/Desktop/git-practice (main)
$ git branch -d no-fast-forward
Deleted branch no-fast-forward (was 377f6db).
~/Desktop/git-practice (main)
$ git branch
* main
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