git 자주쓰는 명령어

reset

HEAD 는 현제 커밋 위치이다.

git reset HEAD~1 로 하나 전 커밋으로 갈 수 있다. ( 커밋한 기록은 사라진다) 커밋한 기록을 보관하고 싶은것이라면 reset을 사용하면 안되고 그래도 사용해야 한다면 원격 저장소에 올려 놓고 reset을 실행해야 한다.

reset의 3가지 모드 git reset HEAD~1 --<mode (soft, mixed, hard)>

  1. 기본 모드인 mixed는 새커밋에서 기존 커밋으로 이동할때 staged 는 하지 않은 상태로 돌아간다.
  2. soft 는 staged 된 상태로 돌아간다.
  3. hard 는 수정 내용을 아예 다 버린채 기존 커밋으로 돌아간다.

만약 새로운 수정 내용이 있는상태에서 마음에 들지 않아서 수정 내용을 모두 삭제하고 싶다면 HEAD 를 없애고 git reset --hard 하면 된다.

또는 commit ID 를 통해서 돌아 갈수도 있다. git reset <commitId>

revert

revert 는 커밋을 되돌리기는 하지만 이 또한 새로운 커밋으로 만든다. git revert HEAD → 새로운 커밋 생성

왜 사용할까?

  • 실수한 커밋이 원격 저장소에 올라감
  • 리셋 하면 원격에 올라간 내용은 되돌릴수 없음.
  • revert를 통해서 실수 위에 돌아가는 커밋을 다시 푸시함으로서 해결 가능. (실수 만회 까지 공유할수 있게됨)

merge

브랜치에서 다른 브랜치에 내용을 합친다. 메인 브렌치에서 기능 브랜치를 합치려면 git merge <기능 브랜치> 충돌 가능성도 있는데 파일 수정 후 커밋해서 충돌을 해결한다. merge 자체를 중단하고 싶다면 git merge --abort 하면 된다.

rebase

git rebase <기능 브랜치> 충돌 발생한 파일을 수정후 stage에 올린다. 그후 git rebase --continue 로 다음 작업을 이어 한다. 마찬가지로 중단하고 싶다면 git rebase --abort 로 수정을 중단할 수 있다.

merge 와 다른점은 메인 브랜치에 에서 분기한 조상 커밋을 기능 브랜치에 마지막 커밋으로 바꿔서 합치기 때문에 분기가 사라지고 fast forward 로 합쳐지는 효과가 있다.

Cherry Pick

merge나 reabase 를 하면 머지 하려는 브랜치에 최신 커밋 내용을 포함한 내용이 합쳐진다. 만약 머지 하려는 브랜치에 특정 커밋만 합치고 싶다면 cherrypick 을 사용하면 된다.

git cherry-pick <커밋 아이디> 특정 커밋만 합쳐서 새로운 커밋을 생성한다. 합쳐지는 것이 아님.

Cherry Pick 관련된 내용은 아니지만

git chekout <commit | branch> <file path> 로 특정 파일만 가져올수 있다.

tag

특히 중요한 커밋에 tag를 추가하면 id 가 아니로 tag로 커밋을 식별할 수 있다.

git tag v1.0.0 이제 커밋 아이디가 아니라 태그명을 사용할 수 있다. git resset v1.0.0

stash

어떤 작업을 하고 있다가 다른 작업을 해야해서 브랜치를 옮겨야 한다면 기존 방법 대로라면 완성 되지 않은 코드를 커밋 해야 한다. stash를 사용하면 커밋하지 않고 작업 내용을 저장할 수 있다.

git stash 현제 작업 중인 내용을 저장한다.

git stash list stash에 목록을 확인한다.

git stash apply stash를 적용해서 stash 한 시점으로 돌아간다.

git stash drop <stash 아이디 혹은 생략 가능(첫번째 삭제)> 로 저장했던 stash 를 삭제할 수 있다.