Branch
브랜치(branch)란 공간을 별도로 작업하는 방식을 말한다.
머지(Merge)는 브랜치로 따로 작업하던 공간을 합치는 것이다.
기본적으로 branch명은 main을 쓴다.
해당 사진처럼 각각 개리, 빙키가 중간에 branch로 별도의 공간을 사용하도록 해보겠다.
전처럼 git clone으로 다운을 받아온다. README파일을 수정하며 개리 1부터 개리 3까지 add, commit, push를 하며 만들어준다.
git branch 이름:이름"으로 만들어진 브랜치를 만들어준다
git checkout 이름:이름으로 이동한다.
해당 사진에서는 Gary라는 브랜치를 만들고, Gary라는 브랜치로 이동하는 것이다.
영상을 따라서 해당화면처럼 브랜치를 2개 더 만들어준다. 개리가 처음에 생성아 안됐기에 git inti을 한 다음 다시 추가했다. 참고 링크
이번에는 글을 수정하는 방법에 대해 살펴보겠다. hello라는 내용이 담긴 restoreTest.txt라는 파일을 만든다. 영상에서는 vi에디터를 사용했지만 메모장을 이용하여 hello restore로 내용을 바꿨다.
수정한 내용을 복구하고 싶으면 사진과 같이 git restore 파일 이름을 한다.
삭제한 브랜치를 복구하는 방법에 대해 알아보겠다. 브랜치를 삭제하는 방법은
$ git branch -D <삭제할 브랜치명>
이다. D는 소문자여도 된다. 복구할 때는
$ git reflog
를 사용한다.
합병을 사용하는 방법은
1.git checkout main을 해서 main으로 돌아오기
2.git merge branch명 이다.
때에 따라서 추가적으로 합병할 branch가 이게 맞냐는 질문이 나올 수 있다. 영상을 따라 이렇게 했다.
다음은 브랜치끼리 충돌이 일어날 경우를 살펴보겠다.
main에서 main-a와 main-b를 만들자 서로 충돌하려고 할 때의 상황이다. 충돌하면 왼쪽과 같이 메세지가 뜨며 이때 남기고 싶은 내용만 남기면 된다.
내용을 남긴 뒤 add, commit, push과정을 거치면 바뀐 내용이 update된 걸 볼 수 있다.
Fork
A랑 B가 만든 저장소에 C가 새로운 기능을 만들고 싶어한다. 이 때 Fork라는 기능을 이용하여 원본 저장소를 복사하여 새로운 기능을 commit한 뒤 push하여 새로운 기능을 추가할 수 있다. (fork를 실습해보려면 새로운 계정 필요하기에 일단은 영상을 보는 것만 했다.)
브랜치 | 포크 |
하나의 저장소에서 브랜치를 나누어 쓴다 | 여러 저장소를 만들고 브랜치를 만들어 사용한다 |
코드 커밋 이력을 쉽게 볼 수 있다. | 원본 저장소에 영향을 미치지 않으므로 자유롭게 수정할 수 있다 |
소수인원 작업 시 사용하는게 좋다 | 원본 저장소의 이력을 보려면 주소를 추가해야한다 |
불특정 다수의 사람의 작업 시 사용하는게 좋다 |
Pull request
fork한 정보를 원본 저장소에 올리고 싶을 때 사용한다. 협업을 할 때는 merge를 최대한 피하고 pull request를 하는 방향으로 한다.(코드가 합칠 수 있는 지 보기 위해)
main 아래 하단 바에 contribute누르기->open pull rrequest 누르기->어떤 브랜치가 어디로 이동할 지 확인->Create pull request 누른다
이후 원본 저장소에서 내용이 어떤 지에 따라 close pull request를 하여 버그임을 표기하는 등을 할 수 있다.
그 외 명령어
amend
기존의 commit의 누락되거나 수정된 파일을 추가하기 위해서 쓴다 이미 파일이 만들어져있을 때 아래와 같은 방법으로 쓴다.
$ git add amend.txt
$ git commit --amend
stash
A라는 기능을 개발하다가 B라는 기능 개발에 우선순위가 밀릴 때, 개발 중이던 A를 보관하는 용도로 사용한다.
stash를 하면 수행 중이던 작업을 임시 저장하고, 가장 최근 커밋 상태로 만든다.
사용법
git stash
git stash pop
reset
브랜치에 여러가지 버전을 올린 후 이전 커밋으로 브랜치를 되돌릴 때 사용한다.
다른 사람과 쓰는 브랜치에서는 코드가 엉킬 수 있기 때문에 혼자 쓰는 브랜치에서만 사용한다.
사용하는 건 다음과 같이 3가지가 있다.
- hard : 지정한 커밋 이력 이후 변경사항을 다 버리고 지정한 커밋으로 리셋
- mixed : 지정한 커밋 이력 이후 변경 사항은 로컬에 unstaged 상태로 유지하고 커밋은 리셋
- soft : 지정한 커밋 이력 이후 변경 사항은 로컬에 stage 상태로 유지하고 커밋은 리셋
hard는
git reset --hard <commit 해시값>
을 넣어준다. 강제로 추가하는 방법은 git push -f origin main이다.
revert
push된 commit 이력을 되돌릴 때 사용한다. 이 또한 commit으로 간주된다.
사용법
git revert <돌아가고자 하는 곳 해시값>
이때 최신 코드에서 이전 코드로 돌아가므로 기능 충돌이 일어난다. 쓰고자 하는 부분만 수정해주면 된다.
cherry pick
브랜치에 버그가 생긴 경우 버그만 콕 집어서 고치기 or main에 수정사항이 많아 당장 머지 할 수 없을 때 필요 부분을 수정하기 위해 사용한다.
사용법
새로운 브랜치를 만들어서 파일을 수정한다.
log로 원래 main에 합치고 싶은 commit의 해시값을 찾는다.
checkout해서 main으로 돌아온 후 git cherry-pick <해시값>을 한다