이 글은 inflearn의 'Git과 GitHub 시작하기'를 수강하고 적는 글입니다.
revert
- 커밋은 그대로 두면서 working directory의 내용만 되돌림.
revert 사용해 보기
- 대상 커밋을 HEAD커밋의 자식으로 새로 생성한다.
- SourceTree에서는 커밋 선택 -> 우클릿 -> 커밋 되돌리기
- Revert한 커밋 복구 : 커밋 선택 -> 우클릭 -> 이 커밋까지 현재 브랜치를 초기화 -> Hard
주의사항
- revert 대상 커밋은 사라지지 않는다.
- revert 대상 커밋의 내용을 되돌린 새로운 커밋이 생겨난다.
장단점
- 장점: 이전 커밋 기록이 다 남아 있다.
- 단점: 충돌 날 가능성이 매우 높다. 다소 어렵다.
Revert로 여러 커밋을 되돌리려면 어떻게 하나요?
-> 최신부터 순서대로 revert를 반복 적용하면 됩니다!
터미널 사용하기
git revert HEAD HEAD~1
ESC
+:wq
브랜치 체크아웃시 주의사항
브랜치를 만들고 체크아웃을 하려면 현재 작업디렉토리가 깨끗해야 함갑작스럽게 체크아웃이 필요하다면?
- 작업 중인 내용의 임시 저장
- 브랜치1에서 일단 (임시) 커밋을 한다.
- 브랜치2로 체크아웃하고 볼 일을 본다.
- 다시 브랜치1로 되돌아 온다.
- 1의 작업을 이어서 마무리 짓는다.
- 커밋 덮어쓰기 (commit --ammend)를 한다.
- (옵션) 필요하다면 (push --force)를 한다.
- Stash를 이용해서 같은 작업 하기
- Stash를 만든다.
- 이 때 새로운 파일이 있었다면 일단 인덱스에 추가한다.
- 체크아웃한다.
- 되돌아 온다.
- Stash를 Pop한다
- 보통 커밋을 새로 생성한다.
Rebase의 장단점
- 장점 : 커밋 히스토리가 깔끔하게 정리된다.
- 단점 : 잘못하면 위험하다. 이미 원격 저장소에 올라간 경우 + 협업을 하고 있는 경우 특히 위험하다.
git 기초 명령어 요약
- clone : 원격 저장소 복사
- add : 스테이지 영역에 작업 파일 추가
- commit : 세이브, 스테이지 영역의 파일들을 가지고 커밋(=세이브)를 만들 수 있다.
- push: 원격 저장소에 커밋을 업로드
파일의 내용 되돌리기
- 특정 파일의 내용을 마지막 커밋으로 돌리고 싶다면 해당 파일 선택 후
코드 뭉치 버리기
선택
브랜치 변경하기
- 브랜치란 : 기존 내용을 유지한 채 새로운 내용을 추가하고 싶을 때 사용한다.
- 체크아웃 : 특정 브랜치(혹은 커밋)으로 돌아가고 싶을 때 사용.
- 소스트리의 체크아웃: 브랜치 이름을 더블 클릭하는 것만으로 체크아웃 가능
병합하기1
- 헤드 브랜치에 변경사항이 없고
- 병합 대상 브랜치가 헤드로부터 시작된 경우
- 아주 쉽게 병합 가능 = fast-forward
병합하기2
- 헤드 브랜치에 추가적인 커밋이 생기는 경우
- 진짜 병합이 필요해 진다.
- 충돌이 안 나면 좋은데, 충돌이 나도 겁내지 말자.
충돌 해결하기
- 제일 중요한 점 : 겁내지 말자
- 같은 파일을 병합 대상 두 커밋에서 동시 수정했을 경우 충돌이 날 확률이 높다
- 에디터 사용, 혹은 SourceTree를 사용해서 충돌 해결 가능
커밋 되돌리기
reset 사용하기
- 장점: 쉽다
- 단점1 : 커밋이 날아간다
- 단점2 : 강제 푸시가 필요하다
branch 만들어서 되돌리기
- reset과는 달리 내용이 사라지지 않는다.
- 장점 : 쉽다
- 단점 : 트리가 지저분해진다
revert
- 커밋이 없어지지 않는다.
- 장점 : 가장 정석적
- 단점 : 충돌이 날 수 있다.
- 주의사항 : 현재 선택한 커밋의 내용을 되돌린다.
revert2
- revert로 여러 커밋을 되돌리려면 최신부터 순서대로 revert 하자
- 그렇게 하면 충돌을 막을 수 있다.
커밋 덮어쓰기
- 필요하다면 이전 커밋 덮어쓰기도 가능
commit --amend
- 이미 push를 한 경우
push --force
가 필요함
stash
- 다른 브랜치로 체크아웃 하기 전에 현재 작업내용을 저장하는 임시 저장소
- 유용하니 잘 사용하자.
기타 주의 사항
- 코드를 남기려고 주석을 달지 말자.
- 커밋 메시지를 잘 쓰자
- 한가지 구현이 완료될 때마다 커밋을 하자.
rebase
- merge처럼 두 브랜치를 합칠 때 사용한다.
- 현재 브랜치가 대상 브랜치 위로 올라간다.
- 위험하니 조심스레 사용하자.