기록하는 습관을 들이자

[GIT] GIT 명령어 모음 본문

ETC

[GIT] GIT 명령어 모음

myeongmy 2023. 3. 25. 20:22
반응형

git log

커밋로그들을 확인

 

git status

현재 working directory의 변경사항을 확인 (unstaged area)

 

git add

git status 내용들을  staging

 

git commit -m "커밋 메시지"

커밋

 

git push origin master

origin 이라는 원격 저장소의 master 브랜치에 push

 

[커밋 내용 되돌리기]

reset: 과거의 특정 커밋으로 되돌린다.

revert: 현재에 있으면서 과거의 특정 커밋들만 없앤다.

 

공통점은 과거의 커밋으로 되돌린다는 점이지만,

가장 큰 차이점은 커밋 이력이 남는가(과거로 되돌리겠다는 내용도 기록이 되는지 여부) 이다.

GIT Reset

Reset은 아예 현재가 없었던 것처럼 원하는 과거로 돌아갈 수 있다. 그림과 같이 4번째 커밋에서 3번째 커밋으로 돌아갈 경우, 4번째 커밋은 완전히 사라지게 된다.

 

GIT Revert

Revert의 경우 그림과 같이 3번째 위치의 커밋에서 2번째 커밋 내용으로 돌아갈 경우 4번째 위치에 2번째 내용의 커밋이 위치하게 된다. 즉, git revert 명령은 브랜치의 커밋 히스토리를 수정하지 않으면서 특정 커밋의 변경사항을 되돌리는 작업에 유용하다.

 

Reset의 경우 취소하고 싶은 커밋이 이미 원격 저장소에 올라간 경우 문제가 될 수 있다.

로컬에서 reset한 후 git push origin master를 통해 git에 push 하면 원격 저장소에는 이미 커밋이 올라가 있기 때문에 fatal이 뜨게 된다. 이 때, -f를 붙여 강제로 push하게 하면 원격 저장소에서 해당 커밋이 사라지게 된다.

그런데, 해당 원격 저장소를 여러명이서 공유하고 있는 경우라면 커밋을 취소하기 전 팀원이 소스를 다운받아 개발하고 있었던 경우라면, 해당 팀원은 커밋이 취소된 사실을 모르기 때문에 후에 자신이 개발한 코드를 push 할 때 취소했던 커밋 내용이 다시 업로드 되는 경우가 있다.

따라서, reset은 혼자 개발하는 경우에 사용하는 것이 적합하다.

 

Revert의 경우 히스토리에 남게 되어 왜 돌아갔는지 등의 내역이 커밋 이력에 남기 때문에 협업 시 코드 충돌을 최소화할 수 있다.

 

[ Reset ]

git reset --soft [commit ID] 
git reset --mixed [commit ID]
git reset --hard [commit ID]
git reset HEAD~10 
git reset HEAD^

soft

- commit된 파일들을 staging area로 되돌려 놓는 옵션 (commit하기 전 상태)

mixed

- 옵션을 붙이지 않는다면 기본으로 설정된다. commit된 파일들을 working directory로 돌려놓는 옵션

  (add하기 전 상태로)

hard

- commit된 파일들 중 tracked 파일들을 working directory에서 삭제

  (untracked 파일은 계속해서 untracked 상태로 남음)

HEAD_취소할 커밋의 개수

- 현재로부터 원하는 만큼의 commit이 취소

HEAD^

- 가장 최근의 commit이 취소(기본 옵션 mixed)

 

 

[ Revert ]

git revert [commit ID]

돌아가고자 하는 commit ID를 적어 사용한다.

 

반응형
Comments