아래에 평소에 자주 사용되는 Git 명령어를 정리한다.
브랜치
- brnach이라는 브랜치를 생성한다.
git branch <branch>
- branch브랜치로 이동한다.
git swtich <branch>
-
git checkout
도 브랜치 이동으로 사용할 수 있다. 하지만 이 명령어는 브랜치 이동과 복원 두 가지 기능을 하고 있어,git switch
와git restore
로 분리되었다. -
git -c <new-branch>
를 사용하면 아래의 기능을 한 번에 한 것과 같다.
git branch <new-branch>
git switch <new-branch>
작업 합치기
브랜치의 커밋들을 합치는 방법에는 git merge <branch>
와 git rebase <branch>
두 가지가 있다. 이 두 방법에는 약간의 차이가 있다.
merge
를 사용하게 되면 마지막 두 커밋(C3, C4)와 공통 조상(C2)을 사용하는 3-way merge로 새로운 커밋을 만들어 낸다.
rebase
를 사용할 경우 C3에서 변경된 사항을 Patch로 만들고 이를 다시 C4에 적용하여 새로운 커밋을 만들어 낸다. rebase
를 사용하면 커밋 로그가 깔끔해지지만 사용이 복잡하다는 단점이 있다.
HEAD
HEAD
는 현재 작업 중인 브랜치를 가리키는 포인터이다. 브랜치들은 브랜치에 담긴 커밋 중 가장 마지막을 가리킨다.
복구
소스 코드를 특정 커밋으로 이동하고 싶으면 다음과 같은 명령어를 사용할 수 있다.
git reset [--soft | --mixed [-N] | --hard] [<commit>]
-
–soft: 해당 커밋으로 돌아가지만, 이후의 내용이 지워지지 않고 스테이지에 남아 있다.
-
–mixed(default): 해당 커밋으로 되돌아가지만, 이후의 내용이 지워지지 않고 스테이지가 초기화 되어있는 상태이다.
-
–hard: 돌아가려는 커밋 이후의 모든 내용을 삭제한다.
특정 커밋으로 복구할 수 있는 다른 방법이 하나 더 있다.
git revert [<commit>]
reset
과의 차이는 revert
는 복구 후, 복구한 애용이 커밋으로 남게 됩니다. 여러 명에서 동시에 작업 중인 경우는 revert
가 혼란을 막을 수 있어서 좋습니다.
역으로 reset
등 으로 삭제된 커밋을 다시 복구 싶을 때도 있다. git reflog
라는 명령어를 입력하면 HEAD
의 변경 이력을 볼 수 있다. 그의 예시는 아래와 같다.
8d029ef HEAD@{0}: rebase finished: returning to refs/heads/topic
8d029ef HEAD@{1}: rebase: c5
1256deb HEAD@{2}: rebase: c4
fc498f4 HEAD@{3}: checkout: moving from topic to fc498f4f7eeb9d345549bb2bd0441e7
9c16c89 HEAD@{4}: checkout: moving from master to topic
git reset --hard HEAD@{4}
와 같은 명령어로 특정 명령의 시점으로 되돌릴 수 있다.
원격 저장소 다루기
원격 저장소의 가져오기에는 git fetch <remote> <branch>
또는 git pull <remote> <branch>
로 가능하다. pull
은 fetch
와 다르게 가져오자마자 자동으로 merge
가 이루어진다.
체리-픽
다른 브랜치에 있는 커밋을 현재 브랜치에 적용시킬 수 있는 명령어다.
git cherry-pick <commit>
관련 사이트
https://www.devpools.kr/2017/02/05/초보용-git-되돌리기-reset-revert/
댓글남기기