Tech

Diary

Lecture

개발중

About Me

개발중

Git 명령어

JeongSeulho

2024년 01월 06일

준비중...
클립보드로 복사
thumbnail

0. 들어가며

실습코치로서 Git 관련 코칭을 위해 프로젝트를 진행하며 자주 사용하거나 중요한, 또는 유용한 Git 명령어들을 정리해보았다.

1. 이전 커밋 수정하기

이전의 커밋을 수정할 때 주의할 점은 push한 커밋에 대해서는 수정을 조심해야 한다.
협업을 진행하고 있는 다른 사람들이 이미 수정하기 전의 커밋을 pull한 상태에서 remote의 커밋이 수정되면 충돌이 발생할 수 있기 때문이다.

(1) 가장 최근 커밋의 메세지 수정

copy
git commit --amend -m "an updated commit message"

--amend는 덮어쓰기를 의미한다.

(2) 가장 최근 커밋에 내용 추가하기

copy
git add .
git commit --amend --no-edit

(3) 바로 직전이 아닌 커밋 수정하기

copy
git rebase -i [Commit ID]

-i 옵션은 interactive의 약자로, rebase를 진행할 때 수정할 커밋을 선택할 수 있게 해준다. commit ID는 git log를 통해 확인할 수 있다. 또한, commit ID가 아닌 HEAD~n을 통해 n번째 이전 커밋을 선택할 수 있다.

이후 commit 내역이 나타나는데, 수정하고자 하는 커밋의 pickedit으로 변경하고 저장한다.
이렇게하면 HEAD가 해당 커밋으로 이동하고, 위에서 --amend를 통해 커밋을 수정하고

copy
git rebase --continue

를 통해 rebase를 계속 진행한다.

또한, edit이외에도 squash를 통해 여러 커밋을 하나로 합치는 등 다양한 작업을 할 수 있다.

2. 버전 되돌리기

git reset은 위에서 언급한 것과 같이 push한 커밋에 대해서는 조심해야 한다.

(1) git reset

Commit ID부터 HEAD까지의 커밋을 취소한다.

copy
git reset --soft [Commit ID]
  • soft : 커밋이 취소되고, 해당 커밋의 내용은 스테이지와 워킹 디렉토리에 남는다.
  • mixed : 커밋이 취소되고, 해당 커밋의 내용은 워킹 디렉토리에 남는다.
  • hard : 커밋이 취소되고, 해당 커밋의 내용은 완전히 삭제된다.

(2) git revert

Commit ID의 커밋의 변경에 대하여 반대로 적용한 커밋을 생성한다.

copy
git revert [Commit ID]

// 여러 커밋을 revert할 때
git revert [Commit ID1]..[Commit ID3]

// revert한 내용을 커밋하지 않고 스테이지에만 올릴 때
git revert --no-commit [Commit ID]

3. 커밋하지 않고 임시 저장하기

git stash를 통해 워킹 디렉토리와 스테이지에 있는 변경사항을 임시로 저장할 수 있다, 주로 개발 중에 급하게 다른 브랜치로 이동하여 작업을 해야 할 때 사용한다.

copy
// 스택에 임시 저장
git stash

// 불러오면서 스택에서 삭제
git stash pop

4. rebase로 커밋 히스토리 정리하기

브랜치가 많아지면 히스토리가 복잡해지기 마련이다, 이때 -rebase를 통해 히스토리를 정리할 수 있다.

copy
git pull –rebase upstream [branch name]
  • rebase 전

image

  • rebase 후

image

5. 원격에서 삭제된 브랜치를 로컬에서 삭제하기

copy
git fetch --prune

6. 이미 원격에 올라간 파일을 뒤늦게 .gitignore에 추가했을 때

copy
git rm -r --cached .
git add .
git commit -m "Apply .gitignore"
git push