일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Heap
- C++
- 회귀
- 국민대학교
- 머신 러닝
- gan
- instaloader
- SQL
- machine learning
- 스택
- programmers
- 재귀
- googleapiclient
- 운영체제
- PANDAS
- 국민대
- kmu
- python3
- 정렬
- 데이터베이스
- 프로그래머스
- OS
- Regression
- db
- Stack
- Seq2Seq
- GIT
- LSTM
- Python
- 파이썬
- Today
- Total
정리 노트
Git(2) 본문
이 포스트는 국민대학교X프로그래머스 주관하는 '2022학년도 여름방학 인공지능 온라인 실전 부트캠프'에서 배운 내용을 정리하는 포스트입니다.
또한 포스트를 작성하는 과정에서 전에 배웠던 Git 사용법(학교 교수님의 자료)과 Git Documentation을 참고했습니다.
https://git-scm.com/book/ko/v2/
Git - Book
이 포스트를 읽기 전에 Git(1)을 읽으시는 것을 추천합니다. -> 2022.07.05 - [개념 정리] - Git(1)
Git의 Branch
학교 교수님의 강의 자료에 따르면 branch는 독립적으로 작업을 진행하기 위한 버전이라고 설명할 수 있습니다. Git은 기본적으로 기본 branch인 'master' branch에서 진행됩니다. 여기서 branch를 새로 생성하면 master branch와 독립적인 하나의 흐름을 만들어낼 수 있고, master branch와 생성된 branch는 각자 독립적으로 자신의 branch 안에서 작업이 가능합니다.
branch가 어떤 녀석인지 알아보기 위해 우선 branch를 하나 새로 만들어봅시다. 여기서부터는 branch의 효과를 잘 볼 수 있기 위해 새로운 폴더에서 commit을 어느 정도 보낸 상태에서 진행했습니다.
user@<your_name>:~/바탕화면/test$ ls
README.md
user@<your_name>:~/바탕화면/test$ git log
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98 (HEAD -> master)
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
branch를 새로 생성하려면 아래와 같이 하시면 됩니다. 저는 새 branch의 이름을 'devel'이라 지었습니다. 현재 어떤 branch들이 있는지 확인하려면
-v 옵션으로 확인할 수 있습니다.
user@<your_name>:~/바탕화면/test$ git branch devel
user@<your_name>:~/바탕화면/test$ git branch -v
devel 9b0dcc1 Second Commit
* master 9b0dcc1 Second Commit
현재 master와 devel, 두 개의 branch가 있다는 것을 확인할 수 있습니다. master 앞에 '*' 표시가 붙어있는 뜻은 현재 master branch에서 작업하고 있음을 의미합니다. branch를 옮겨 작업하려면 아래와 같이 옮길 수 있습니다.
user@<your_name>:~/바탕화면/test$ git checkout devel
'devel' 브랜치로 전환합니다.
user@<your_name>:~/바탕화면/test$ git branch -v
* devel 9b0dcc1 Second Commit
master 9b0dcc1 Second Commit
이제 devel branch에서 파일을 수정하고 commit을 해봅시다.
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
### This is Third Commit (devel)
user@<your_name>:~/바탕화면/test$ git log
commit 14c8804a109a78daf637ad78c1a15314972facc1 (HEAD -> devel)
Author: <Your Name> <your@email>
Date: Wed Jul 6 11:32:19 2022 +0900
Third Commit
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98 (master)
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
저희의 commit이 잘 반영되었음을 볼 수 있습니다. 여기서 master branch로 다시 넘어가면 저희의 세 번째 commit은 사라집니다.
이는 저희의 세 번째 commit은 master branch가 아닌 devel branch에서만 발생했기 때문에 master에는 반영되지 않은 것입니다.
user@<your_name>:~/바탕화면/test$ ls
README.md
user@<your_name>:~/바탕화면/test$ git log
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98 (HEAD -> master)
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
Branch 간의 병합 - Fast Forward
devel branch의 commit을 master에도 반영시키려면 branch를 병합해야 합니다. 병합을 통해 master branch에게 "devel branch가 네 앞에 이미 몇 개의 commit을 더 만들었어!"라고 알려주는 거라 생각하면 이해하기 쉬울 것입니다.
이러한 경우, 갱신해야하는 branch(여기서는 master)로 넘어가서 진행해야 합니다.
user@<your_name>:~/바탕화면/test$ git checkout master
'master' 브랜치로 전환합니다
user@<your_name>:~/바탕화면/test$ git merge devel
업데이트 중 9b0dcc1..14c8804
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
### This is Third Commit (devel)
user@<your_name>:~/바탕화면/test$ git log
commit 14c8804a109a78daf637ad78c1a15314972facc1 (HEAD -> master, devel)
Author: <Your Name> <your@email>
Date: Wed Jul 6 11:32:19 2022 +0900
Third Commit
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
이러한 병합 방식을 'Fast-forward' 방식이라고 부릅니다. 그림으로 표현하자면 아래와 같습니다.
Branch 간의 병합 - 3-Way Merge
병합 방식은 이거 말고도 '3-Way' 방식도 존재합니다.
3-Way 방식을 실습해보기 위해 master, devel branch에서 각각 README.md 파일에 서로 다른 한 줄씩 추가해서 각 branch에서 commit을 해봅시다.
user@<your_name>:~/바탕화면/test$ git log
commit c18d32592193cdc7516fddfb60713f2d53b80286 (HEAD -> master)
Author: <Your Name> <your@email>
Date: Wed Jul 6 20:12:56 2022 +0900
Fourth Commit
commit 14c8804a109a78daf637ad78c1a15314972facc1 (devel)
Author: <Your Name> <your@email>
Date: Wed Jul 6 11:32:19 2022 +0900
Third Commit
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
### This is Third Commit (devel)
#### This is Fourth Commit (master)
user@<your_name>:~/바탕화면/test$ git checkout devel
'devel' 브랜치로 전환합니다
user@<your_name>:~/바탕화면/test$ git log
commit cc2fa5427d19210483b3908a97f752acabfb66da (HEAD -> devel)
Author: <Your Name> <your@email>
Date: Wed Jul 6 20:13:29 2022 +0900
Fifth Commit
commit 14c8804a109a78daf637ad78c1a15314972facc1
Author: <Your Name> <your@email>
Date: Wed Jul 6 11:32:19 2022 +0900
Third Commit
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
### This is Third Commit (devel)
#### This is Fifth Commit (devel)
이제 이 상황에서 master branch에게 devel branch의 상태로 따라가라는 의미로 master branch에서 merge를 실행해보면 충돌이 발생합니다. 이 상황이 저희가 3-Way 병합 방식을 사용해야 하는 이유입니다.
user@<your_name>:~/바탕화면/test$ git merge devel
자동 병합: README.md
충돌 (내용): README.md에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.
이럴 때, 충돌된 부분을 텍스트 편집기 등을 통해 수정하려 할 때 아래와 같이 보입니다. 저 같은 경우는 vi 에디터를 사용합니다.
# This is First Commit (master)
## This is Second Commit (master)
### This is Third Commit (devel)
<<<<<<< HEAD
#### This is Fourth Commit (master)
=======
#### This is Fifth Commit (devel)
>>>>>>> devel
HEAD라 표시된 부분의 밑줄이 현재 branch에서 작성한 부분이고, devel이라 표시된 부분의 윗 줄이 devel branch에서 작성한 부분입니다. 이 두 문장이 서로 충돌하여 병합이 일어나지 않았습니다. 그래서 둘 중 하나를 골라야 합니다. 저는 master branch에서 썼던 문장을 골랐습니다.
user@<your_name>:~/바탕화면/test$ cat README.md
# This is First Commit (master)
## This is Second Commit (master)
### This is Third Commit (devel)
#### This is Fourth Commit (master)
이제 이 수정 사항을 commit 하면 충돌 상황이 해결되었습니다. 이 과정을 3-Way 병합 방식이라 합니다.
user@<your_name>:~/바탕화면/test$ git log
commit 0cae060d53cc0660f34d3b1d707d330f653b4959 (HEAD -> master)
Merge: c18d325 cc2fa54
Author: <Your Name> <your@email>
Date: Wed Jul 6 20:28:38 2022 +0900
Sixth Commit
commit cc2fa5427d19210483b3908a97f752acabfb66da (devel)
Author: <Your Name> <your@email>
Date: Wed Jul 6 20:13:29 2022 +0900
Fifth Commit
commit 14c8804a109a78daf637ad78c1a15314972facc1
Author: <Your Name> <your@email>
Date: Wed Jul 6 11:32:19 2022 +0900
Third Commit
commit 9b0dcc10f2b278a2834ac2d0c56c4f10da802a98
Author: <Your Name> <your@email>
Date: Tue Jul 5 12:00:49 2022 +0900
Second Commit
commit 4a6ab4ea25f64e287657eb468c36e83bbdba09cc
Author: <Your Name> <your@email>
Date: Tue Jul 5 11:59:52 2022 +0900
First Commit
3-Way 병합을 그림으로 표현하자면 아래와 같습니다.
3-Way 병합은 저도 아직 완벽하게 잡히지 않는 방식이라 정확한 설명은 아래의 사이트를 참고하길 바랍니다.
Branch 삭제
이제 branch를 더 이상 사용할 일이 없는 경우, branch를 삭제할 수 있습니다.
user@<your_name>:~/바탕화면/test$ git branch -d devel
devel 브랜치 삭제 (과거 cc2fa54).
user@<your_name>:~/바탕화면/test$ git branch -v
* master 0cae060 Sixth Commit
Github을 이용하고 싶으신 분들은 아래의 글을 읽어보시길 바랍니다.
'개념 정리' 카테고리의 다른 글
영상 처리에서의 edge 검출 (0) | 2022.10.09 |
---|---|
영상 처리의 세 가지 기본 연산 (2) | 2022.09.21 |
Git(1) (0) | 2022.07.05 |
Python의 list, tuple, dictionary, set (0) | 2022.07.02 |
wsgiref 모듈과 같이 WSGI 알아보기(Python) (0) | 2022.06.25 |