본문 바로가기

학습/git

[Git]branch, merge

1. branch
하나의 코드 관리 흐름(나뭇가지)
맨 처음 커밋(root commit)
예를 들어 유료, 무료 버전으로 나눈다고 할 때 두 개의 branch를 쓸 수 있다.

2. branch 만들기
git branch 브랜치이름

3. branch 이동
git checkout 브랜치이름

4. branch 조회하기
git branch

5. git branch -d 브랜치이름
branch 삭제하기

6. branch를 만들면서 이동하기
git checkout -b 브랜치이름

7. 브랜치 merge하기
git merge 가져올브랜치이름
다른 branch의 내용을 가져오기 / 커밋 메시지 작성창이 뜬다.

8. conflict란?
merge를 하다가 충돌이 발생했다는 뜻.

9. conflict 해결방법
1. conflict가 발생한 파일을 연다
2. 결과가 되었으면 하는 모습대로 코드를 수정한다.
3. 다시 커밋을 해준다.

또는
머지 자체를 취소할 수 있다.
git merge --abort

10. 여러 파일에서 conflict가 발생했을 때
merge의 출력 결과 뿐만 아니라 git status에서도 conflict 발생 파일을 알 수 있다.
해당 파일을 수정하여 commit하거나 머지를 취소한다.


11. remote repository에서 보이는 브랜치

git remote add origin github레포지토리주소
-remote : 리포트 레포지토리에 관한 작업을 할 때 쓰는 커맨드
-add 새로운 리모트 레포지토리를 등록하겠다는 뜻
-origin github레포지토리주소 :  github레포지토리주소를 origin이라는 이름으로 등록하겠다는 뜻 

이 작업이 끝나면 github레포지토리주소를 origin으로 간단하게 표현할 수 있다.
origin을 제외하고 다른 이름이 사용가능하지만 git에서 리모트 레포지토리를 최초로 추가할 때 origin이라는 이름이 관례화가 되어있다.


12. git push -u origin main
현재 로컬 레포지토리에 있는 main 브랜치의 내용(=main 브랜치와 관계된 모든 커밋들)을
origin이라는 리모트 레포지토리로 보낸다는 뜻
같은 이름의 브랜치로 전송하게 되는데 main 브랜치가 없으면 새로 만들고 push하게 됨.

-u(--set-upstream 옵션의 약자)
해당 옵션을 주게 되면 local repository의 main branch가 해당 remote repository와
연결되어 tracking connection 되어 있는 상태

이렇게 tracking connection 되어 있는 상태일 때, 리모트에 있는 branch를 로컬브랜치의 upstream branch라고 한다.
tracking connection이 되어 있으면
git push / git pull 명령만 써줘도 대상을 안정해도 자동으로 작동한다.

tracking connection을 하지 않으면
git push origin main:main 이런식으로 작성을 해야한다.


13. 기존의 없던 branch push 하기
git push --set-upstream origin newbranch 명령 실행 후
이후는 push는 git push만 해주면 된다.

 

14. head와 branch의 관계
branch는 커밋을 가리킴
head는 branch를 통해 커밋을 간접적으로 가리킴

15. git reset 할 때 HEAD의 변화는?
HEAD는 브랜치를 따라가는 것
브랜치는 reset시 다른 특정 커밋을 가리키게 됨
결론적으로 HEAD는 브랜치를 따라 간접적으로 가리키는 커밋이 바뀜

16. git reset을 한다고 리셋된 커밋 이후의 커밋이 사리지는게 아니다
이전 커밋으로 reset 후 다시 이후 커밋으로 reset할 수 있다.

17. HEAD가 직접 커밋을 가리키는 방법
git checkout 커밋해시
이 상태를 Detached HEAD라고 부름
특정 커밋에서 branch를 만들고 싶을때 자주 사용
사용이 완료된 detached HEAD는 다시 git checkout 브랜치이름 으로 원상태로 바꿔준다

18. 머지를 해서 새로 생기는 커밋을 머지커밋이라 부른다
하지만 머지를 한다고 항상 새로운 커밋이 생기지는 않는다.

같은 라인의 이전버전 브랜치에 최신버전 브랜치를 머지하면 최신버전의 커밋과 같아진다.
이런 경우를 Fast-foward 머지라고 부름.

하지만 브랜치가 라인을 벗어나 새로운 라인에 있을 때 머지를 하게되면
분기점, 머지대상, 자기자신 을 고려하기 때문에 3-way 머지가 된다.

'학습 > git' 카테고리의 다른 글

[Git]협업 및 작업 관련 명령어  (1) 2023.10.26
[Git]Github와 commit  (3) 2023.10.25
[Git]Git 작업 영역 및 파일 상태  (0) 2023.10.24
[git]git과 github, repository와 commit  (1) 2023.10.23