현재 work3까지 master 브랜치로 만들어준 다음에 각 브랜치들을 다만들어주고 work4를 만들었다.
—online 옵션은 한 줄에 한 커밋씩 나타내 주기 때문에 커밋을 간략하게 확인할 때 편리하다.
git log —oneline
master branch는 work 4 나머지 브랜치들은 work 3 커밋 상태이다.
다른 브랜치로 이동하기
git checkout 변경할 브랜치명
변경하고 —oneline 옵션으로 확인해보면
cat work.txt를 해보면 - work 3까지 작업인 내용들이 들어있다.
- 즉 master 브랜치에서 work 4에 내용들은 나머지 브랜치에 영향을 미치지 않았다.
내용을 추가한 뒤
git log --oneline --branches 옵션을 사용하면 각 브랜치의 커밋을 함께 볼 수 있다.
git log --oneline --branches --graph를 사용하면 그래프 형태로 보기 쉽게 보여준다.
git log master..apple 명령어를 수행하면
master 브랜치에는 없고 apple 브랜치에만 있는 커밋 ‘apple content 4” 커밋을 보여준다.
브랜치 병합하기
o2 브랜치의 내용을 master 브랜치로 병합하려면 먼저 master 브랜치로 체크아웃 해줘야 한다.
git merge o2
- 브랜치를 병합할 때 자동으로 편집기가 실행되면서 커밋 메시지를 추가 작성할 수 있었다.
#편집기 창에서 열지 않고 깃에서 지정하는 커밋 메시지를 그대로 사용
git merge o2 --no-edit
#편집기 창이 나타나지 않도록 설정한 경우, 메시지를 추가하고 싶을 경우
git merge o2 --edit
‘o2 work 2’ 커밋이 master 브랜치에 병합되면 서 ‘Merge branch o2’라는 커밋이 새로 생겼다.
- master 브랜치에서 master work 2 커밋을 하지 않은 아무 변화가 없다면 분기한 브랜치에서 만든 최신 커밋을 master 브랜치가 가리키게 하면 되기 때문에 화면에 커밋 해시가 업데이트 되었다는 내용과 함께 fast-forward라는 메시지가 나타난다. (이런 병합을 빨리 감기 병합(fast-forward-merge)라고 부른다.
충돌이 일어날 경우
#title
content
<<<<<<< HEAD
master content 2 -> 현재 브랜치에서 수정한 내용
=======
o2 content 2 -> 병합할 브랜치에서 수정한 내용
>>>>>>> o2
#title
content
- 내용을 원하는 대로 수정했으면 문서에 나타나 있는 <<<HEAD 나 >>>o2, 가로줄 === 삭제한다.
- 충돌을 해결하고 커밋하고 git log --oneline --branches --graph를 찍어보면 병합이 된것을 볼 수 있다.
프로젝트 규모가 클수록 브랜치가 많으므로 브랜치에서 병합해야 할 파일도 많아진다.
- 병합을 자동으로 처리해주고 충돌을 해결해주는 프로그램이 많다.
프로그램 이름설명
P4Merge | 무료이고 직관적이며 사용이 편리하고 병합 기능이 뛰어납니다. 단축키가 지원되지 않는 단점이 있습니다. |
Meld | 무료이며 오픈 소스입니다. 파일을 비교하는 것뿐만 아니라 직접 편집할 수 있다. |
Kdiff3 | 무료이고 사용이 편리하고 병합 기능이 뛰어나지만 한글이 깨져 보일 수 있다. |
Araxis Merge | 유료지만 용량이 큰 파일에서도 잘 동작합니다. |
- 병합 알고리즘에는 ‘2 way merge’와 ‘3 way merge’가 있다.
- 3 way merge가 훨씬 효율적이므로 3 way merge를 지원하는 프로그램을 선택하는 것이 좋다.
병합이 끝난 브랜치 삭제
브랜치는 깃에서 삭제할 수 있지만 브랜치를 삭제하더라도 이 브랜치가 완전히 지워지는 것이 아니라 다시 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있다.
저장소의 기본 브랜치는 master이므로 브랜치를 삭제하려면 master 브랜치에서 해야한다.
- 브랜치를 삭제한다는 것은 완전히 저장소에서 없애는 것이 아니라 깃의 흐름 속에서 감추는 것이다.
git reset 명령어를 사용해서 다른 브랜치에 있는 커밋을 골라서 최신 커밋으로 지정할 수 있다.
git reset (다른 브랜치 커밋 해시)
- sub 브랜치의 최신 커밋이 master 브랜치의 최신 커밋인 c2로 바뀌었다. (HEAD는 그대로 sub 브랜치)
- git reset 명령을 사용하면 현재 브랜치가 가리키는 커밋을 여러 브랜치 사이를 넘나들면서 제어할 수 있다.
sub 브랜치는 c2 커밋을 가리키고 있기 때문에 원래 가리키고 있던 s1 커밋은 연결이 끊기면서 삭제된다.
수정 중인 파일 감추기 및 되돌리기
git stash를 사용하려면 tracked 상태여야 한다. → 즉 한 번은 커밋한 상태
- 2개의 파일을 커밋해주고 수정했다고 하자
수정된 2개의 파일을 커밋하기 전에 다른 파일을 수정해야 한다고 가정해보자.
- 커밋하지 않은 수정 내용을 어딘가에 보관하려면 git stash 명령을 사용한다. (혹은 git stash save)
- git status 명령을 실행하면 modified 메시지가 사라졌다. (add , commit 하라는 메시지)
- cat 명령어를 사용하여 f1,f2내용을 보면 수정하기 전에 내용이 적혀있다.
같은 방법으로 여러 파일을 수정한 후 따로 보관할 수 있으며, 이렇게 감춘 파일들은 stash 목록에서 확인할 수 있다. (가장 먼저 감춘 것은 stash@{0}에 들어가 있다.)
- 앞으로 다른 파일이 추가되면 기존 파일은 stash@{1}로 옮겨지고 새로 추가된 파일은 stash@{0}에 담긴다.
- 먼저 감춘 것을 아래에 가장 최근에 감춘 것을 위에 쌓기 때문에 stash 스택 이라고도 표현한다.
작업을 마치고 감춰둔 파일을 꺼내와 계속 수정하거나 커밋할 수 있다.
- git stash 명령 뒤에 pop를 추가하면 stash 목록에서 가장 최근 항목을 되돌린다.
- cat 명령으로 보면 f1,f2에 수정했던 내용이 있는것을 알 수 있다.
stash apply와 stash drop
stash 목록에 저장된 수정 내용을 나중에 또 사용할지도 모른다면 pop말고 git stash apply 명령을 사용한다.
- stash목록에서 가장 최근 항목을 되돌리지만 저장했던 내용은 그대로 남겨둔다.
stash drop 명령은 stash 목록에서 가장 최근 항목을 삭제한다.
처음에 원격 저장소에 파일 올릴 때
git push -u origin master
- 지역 저장소의 브랜치를 origin, 즉 원격 저장소의 master 브랜치로 푸시하라는 명령
‘-u’옵션은 지역 저장소의 브랜치를 원격 저장소의 master 브랜치에 연결하기 위한 것으로 처음에 한 번만 사용
원격 저장소에 파일 내려받기
원격 저장소에 있는 소스 파일을 다른 사용자가 수정했거나 깃 허브 사이트에서 직접 커밋하면 지역 저장소와 차이가 생긴다.
- 상태를 같게 만들기 위해 원격 저장소의 소스를 지역 저장소로 가져올 때 git pull을 사용한다.
git pull origin master
- origin(원격 저장소)의 내용을 master 브랜치로 가져온다는 뜻
'개발 > Git' 카테고리의 다른 글
Git 정리 (SSH) (0) | 2023.03.12 |
---|