728x90
반응형
# git_test directory를 git init한다.
$ git init
Initialized empty Git repository in C:/Project/git_test/.git/
# f1.txt파일을 추가 저장한다.
$ vim f1.txt
# 수정사항을 add 하고 '1' commit을 생성한다.
$ git add .
$ git commit -m '1'
[master (root-commit) 689c9ed] 1
1 file changed, 1 insertion(+)
create mode 100644 f1.txt
# exp branch를 생성한다. master와 exp branch의 상태는 동일하다.
$ git branch exp
# exp branch로 checkout 한다음 f1.txt파일을 수정해서 commit 2, 3을 생성한다.
$ git checkout exp
Switched to branch 'exp'
$ vim f1.txt
$ git add .
$ git commit -m '2'
[exp a6bb51e] 2
1 file changed, 1 insertion(+)
$ vim f1.txt
$ git add .
warning: LF will be replaced by CRLF in f1.txt.
The file will have its original line endings in your working directory
$ git commit -m '3'
[exp 17c77b9] 3
1 file changed, 1 insertion(+)
# 이번엔 master branch를 check out하여 '4' commit을 생성한다.
$ git checkout master
Switched to branch 'master'
$ vim f1.txt
$ git add .
$ git commit -m '4'
[master 7639f92] 4
1 file changed, 1 insertion(+)
# 이제 모든 branch의 commit log를 graph형태로 확인해보자.
# master branch에는 '2', '3'commit이 없는 것을 확인할 수 있다.
$ git log --branches --decorate --graph
* commit 7639f9290fe0281402909143ca2def26465fbdb6 (HEAD -> master)
| Author: abc
| Date: Fri Aug 26 13:47:04 2022 +0900
|
| 4
|
| * commit 17c77b90fe611afca97910dc9bff5a7706ac162f (exp)
| | Author: abc
| | Date: Fri Aug 26 13:44:54 2022 +0900
| |
| | 3
| |
| * commit a6bb51e58b60ca05cb36c2b303e730d35fb1eb05
|/ Author: abc
| Date: Fri Aug 26 13:44:12 2022 +0900
|
| 2
|
* commit 689c9ed76d359414f3bb3fd39e3ea111a93407a6
Author: abc
Date: Fri Aug 26 13:39:30 2022 +0900
1
# --oneline이라는 옵션으로 축약해서 확인도 가능하다.
admin@DESKTOP-LFHA7HJ MINGW64 /c/Project/git_test (master)
$ git log --branches --decorate --graph --oneline
* 7639f92 (HEAD -> master) 4
| * 17c77b9 (exp) 3
| * a6bb51e 2
|/
* 689c9ed 1
# 이제 master branch가 commit '3', '4'의 내용을 가질 수 있도록 merge해보자.
# master와 exp branch에서 모두 f1.txt파일을 수정했기 때문에 충돌 에러가 발생한다.
$ git merge exp
Auto-merging f1.txt
CONFLICT (content): Merge conflict in f1.txt
Automatic merge failed; fix conflicts and then commit the result.
# gui tool로 conflict를 해결하고 git commit한다.
$ git commit
[master 8637bb9] Merge branch 'exp'
$ git log --branches --decorate --graph --oneline
* 8637bb9 (HEAD -> master) Merge branch 'exp'
|\
| * 17c77b9 (exp) 3
| * a6bb51e 2
* | 7639f92 4
|/
* 689c9ed 1
# exp branch가 4번 commit 내용을 가질 수 있도록 merge한다.
$ git checkout exp
Switched to branch 'exp'
$ git merge master
Updating 17c77b9..8637bb9
Fast-forward
# master, exp branch의 내용이 동일해졌다.
# 마지막 commit의 부모 commit은 2개('3', '4'번 commit)이다.
$ git log --branches --decorate --graph --oneline
* 8637bb9 (HEAD -> exp, master) Merge branch 'exp'
|\
| * 17c77b9 3
| * a6bb51e 2
* | 7639f92 4
|/
* 689c9ed 1
# git cat-file -p commit id로 확인해보면, parent가 2개임을 확인할 수 있다.
$ git cat-file -p 8637bb923b00727733a990b89d52a8daffea9855
tree 77aa31a93565e0c5809ff487b849af48ac7df624
parent 7639f9290fe0281402909143ca2def26465fbdb6
parent 17c77b90fe611afca97910dc9bff5a7706ac162f
author abc 1661489365 +0900
committer abc 1661489365 +0900
Merge branch 'exp'
# 이제 master branch를 checkout 한 다음, exp branch를 삭제해보자.
$ git checkout master
Switched to branch 'master'
$ git branch exp -d
Deleted branch exp (was 8637bb9).
# master branch의 commit log만 확인할 수 있다.
$ git log --branches --decorate --graph --oneline
* 8637bb9 (HEAD -> master) Merge branch 'exp'
|\
| * 17c77b9 3
| * a6bb51e 2
* | 7639f92 4
|/
* 689c9ed 1
728x90
반응형
'Git' 카테고리의 다른 글
Git의 원리] 4. git stash (0) | 2022.09.06 |
---|---|
GitLab CI/CD] 3. Openssh 설정, scp로 웹서버에 파일전송하기 (0) | 2022.09.06 |
Git의 원리] 2. git commit (tree, commit) (0) | 2022.08.25 |
Git의 원리] 1. git add (index, object, blob) (0) | 2022.08.24 |
GitLab CI/CD] 2. Job(.gitlab-ci.yml) 등록하여 실행하기 (0) | 2022.08.24 |
댓글