아래에 평소에 자주 사용되는 Git 명령어를 정리한다.

브랜치

  • brnach이라는 브랜치를 생성한다.
git branch <branch>
  • branch브랜치로 이동한다.
git swtich <branch>
  • git checkout도 브랜치 이동으로 사용할 수 있다. 하지만 이 명령어는 브랜치 이동과 복원 두 가지 기능을 하고 있어, git switchgit 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로 새로운 커밋을 만들어 낸다.

merge

rebase를 사용할 경우 C3에서 변경된 사항을 Patch로 만들고 이를 다시 C4에 적용하여 새로운 커밋을 만들어 낸다. rebase를 사용하면 커밋 로그가 깔끔해지지만 사용이 복잡하다는 단점이 있다.

rebase

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>로 가능하다. pullfetch와 다르게 가져오자마자 자동으로 merge가 이루어진다.

체리-픽

다른 브랜치에 있는 커밋을 현재 브랜치에 적용시킬 수 있는 명령어다.

git cherry-pick <commit>

관련 사이트

https://git-scm.com/doc

https://www.devpools.kr/2017/02/05/초보용-git-되돌리기-reset-revert/

http://ohyecloudy.com/pnotes/archives/1994/

https://imasoftwareengineer.tistory.com/7

태그:

카테고리:

업데이트:

댓글남기기