Git - 자주 사용되거나 유용한 Git 명령들

2020. 3. 27. 20:12Tools/Git&GitHub

 

 

이번 포스팅은 내용설명은 거의 없이 진행할 것이다. 포스팅 내용은 Git에서 자주 사용되거나 유용한 Git 명령들이다.

 

  • git commit --amend : 완료된 커밋을 수정하고 싶을때나, 변경된 내용을 이미 커밋된 내용에 다시 포함시키고 싶을 때 사용하는 명령이다. "A"라는 커밋을 찍었는데, push 전에 내용이 변경되어 staging에 변경사항이 있는데, 이 변경된 staging 내용을 "A"라는 커밋에 포함시키고 싶을 때 사용한다. 즉, staging 변경사항이 없으면 "A"라는 커밋 내용과 동일하고 커밋메시지만 수정한다.
  • git reset HEAD <fileName> : 이미 staging에 올라간 파일을 unstaging으로 바꾸고 싶을때 사용한다. 이 말은 git add한 파일을 되돌리는 것이다. fileName을 넣으면 특정 파일만, 그렇지 않으면 staging에 올라간 모든 파일을 unstaging으로 만든다.
  • git checkout -- <fileName> : 변경된 unstaging 파일중에 최근 커밋 내용상태로 돌아가고 싶을때 사용하는 명령이다. 이 명령은 unstaging 일 경우에만 유효한 명령이다.
  • git fetch & git pull의 차이점 : git fetch는 리모트에 있는 저장소의 데이터를 모두 가져온다. 하지만 로컬 브랜치에 자동으로 머지하지는 않는다. git pull은 리모트 저장소의 모든 데이터를 가져옴과 동시에 현재 머물고 있는 브랜치에 머지까지 자동으로 한다.
  • git tag -l 'v1.8.5*' : v1.8.5로 시작하는 모든 태그를 보여준다.
  • git tag -a 0.1.0 -m 'tag message' : git에는 Lightweight & Annotated 태그 두 가지가 존재하는데, Lightweight 태그는 브랜치와 비슷한데 브랜치처럼 가리키는 지점을 최신 커밋으로 이동시키지 않는다. 단순히 특정 커밋에 대한 포인터일 뿐이다. 한편 Annotated 태그는 Git 데이터베이스에 태그를 만든 사람의 이름, 이메일 태그를 만든 날짜, 그리고 태그 메시지도 저장한다. 해당 명령은 Annotated 태그를 만드는 명령이다("-a 옵션을 붙임으로써")
  • git tag 0.1.0 : Lightweight 태그를 만들어준다. 기본적으로 파일에 커밋 체크섬을 저장하는 것뿐이다.
  • git push <remote명> [태그이름] & git push <remote명> --tags : git push 명령은 자동으로 리모트 서버에 태그를 전송하지 않는다. 태그를 만들었으면 서버에 별도로 push해야한다. 이 명령은 파일의 변경사항에 대한 푸시가 아니고 태그에 대한 푸시이다.
  • git config --global alias.unstageall 'reset HEAD' : 자주 쓰는 명령어를 alias 지정가능하다. git unstageall를 입력하면 git reset HEAD와 동일한 명령어 역할을 하게 된다.
  • git branch --merged : 현재 checkout한 브랜치를 기준으로 merge된 브랜치인지 보여준다. (현재 브랜치가 master이면 master로 이미 merge한 브랜치를 보여준다.) 이 말은 목록으로 나온 브랜치는(현재 브랜치 제외) 삭제해도 정보가 손실되지 않는다. 그 이유는 이미 현재 브랜치로 머지된 브랜치이기 때문에.
  • git branch --unmerged : 현재 checkout한 브랜치를 기준으로 merge하지 않는 브랜치를 보여준다. 그 말은 현재 브랜치를 기준으로 branch를 생성했고, 해당 브랜치를 현재 브랜치로 머지하지 않은 경우 목록으로 나온다. 이 경우에는 git branch -d로 삭제 할 수 없고git branch -D 옵션으로 삭제해야한다.
  • git reset --soft, --mixed, --hard : git reset 명령은 이전 커밋으로 되돌리거나, 커밋을 되돌리고 staging에서 unstaging로 만들거나 혹은 아예 working directory에서 삭제까지 할 수 있는 명령이다. 간단히 이미지로 보자.

 

> git reset --soft HEAD~ : 최근 커밋에서 바로 이전(부모)커밋으로 HEAD를 옮긴다.

 

 

이미지를 보면 커밋만 되돌리고 staging에는 그대로 올라가있다. 그 다음은 git reset --mixed 이다.

 

 

보면 c.txt 파일이 untracked된 것을 볼 수 있다. 이 말은 바로 이전 커밋으로 돌아감과 동시에 해당 파일을 staging에서 unstaging으로 만들었다. 마지막으로 git reset --hard이다.

 

 

가장 조심해서 써야할 옵션이 --hard이다. 커밋도 돌아가고 staging을 unstaging으로 만듬과 동시에 working 디렉토리에서 c.txt를 삭제까지 하였다. 만약 특정 커밋으로 되돌아 가고 싶다면 git reset [option] <commit해시값>으로 되돌아갈 수 있다.

 

 

  • git merge --abort : merge시 충돌이 났을 경우 merge 이전으로 돌려준다. 만약 merge 이전에 working 디렉토리에서 stash하지 않았거나 커밋하지 않은 파일이 존재하고 있을 때는 git merge --abort로 merge전으로 돌아가지 못할 수 있다. 반드시 merge전에는 작업중인 것을 stash하거나 commit해주자.