반응형
버전 관리
- 이전의 생성한 파일 중 하나를 타임캡슐에 담아보자. 기존에 관리하지 않는 파일들은 빨간색으로 추적하지 않는 파일이라고 명시되어 있고,
git add tigers.yaml
명령어를 통해 스테이징된 것을 볼 수 있다.
- 모든 파일을 담고 싶은 경우
git add .
을 통해 모든 파일을 스테이징할 수 있다.
타임캡슐 묻기
- 모든 파일이 스테이징 된 채로 커밋을 해보자. 여기서
-m
의 의미는 커밋 메시지를 담는 것으로git commit
만 사용했을 때vi
편집기가 열리면 해당 내용에서 메시지를 입력후 저장하는 과정을 거쳐야한다. 이 과정을 생략하고 사용할 수 있도록 지원하는 명령어이다.
git log
명령어를 입력해보면 다음과 같이 커밋 기록을 확인해볼 수 있다.
- SourceTree에서도 다음과 같이 커밋한 기록과 메시지를 볼 수 있다.
team: Leopards
manager: Luke
members:
- Linda
- William
- David
lions.yaml
파일 삭제tigers.yaml
의 manager를Donald
로 변경leopards.yaml
파일 추가
- 파일의 추가, 변경, 삭제 모두
git status
에서 관리하는 것을 볼 수 있다.
git diff
명령어를 사용하면 변경사항을 더 자세하게 볼 수 있다. (화면은 j로 내리고 k로 올릴 수 있다.)
git commit -am "message"
를 통해 스테이징과 커밋을 동시에 처리할 수 있다. 단, untracked 파일이 없을 때에 한해서 가능하다.
추가 커밋들
- Tigers의
members
에George
추가 - 커밋 메시지:
Add George to Tigers
team: Cheetas
manager: Laura
members:
- Ryan
- Anna
- Justin
cheetas.yaml
추가 (커밋 메시지 : Add team Cheetas)
cheetas.yaml
삭제- Leopards의
manager
를Nora
로 수정
team: Panthers
manager: Sebastian
members:
- Violet
- Stella
- Anthony
panthers.yaml
추가 (커밋 메시지 : "Replace Cheetas with Panthers")
git log
를 보면 다음과 같다.
과거로 돌아가기 (Reset vs Revert)
reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지운다.
revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행한다.
reset 실습
실습을 하기 전에 .git
폴더를 복사해서 별도의 위치에 저장해두자.
git reset --hard (돌아갈 커밋 해시)
Add team Cheetas
의 커밋으로 돌아가는 실습을 진행해보자. 이전에git log
를 통해 볼 수 있는 커밋 해시를 복사하자. 해당 명령어 실행 시 해당 커밋시점으로 돌아가며, 이후 내역들은 지워진다.
- 첫 번째 커밋기록으로 reset 하고
git log
로 확인해보면 이후 내역이 지워진 것을 확인할 수 있다. 백업해둔.git
폴더를 가져와 덮어쓰자.
- 원래대로 덮어썼지만 변경사항이 발생했다. 이유는 첫 번째 커밋사항에서 내용이 마지막 커밋사항으로 변경되었기 때문이다.
git reset --hard
를 사용하면 가장 마지막 커밋을 가리킨다. 해당 명령어를 입력하고lions.yaml
(마지막 커밋 기준 삭제했던 파일)을 삭제하면 변경사항이 사라진 것을 확인할 수 있다.
revert 실습
git revert (되돌릴 커밋 해시)
- Add George to Tigers 커밋 해시로 돌아가보는 실습을 진행해보자.
- 명령어를 입력하면 다음과 같이 커밋 메시지가 나온다.
:wq
로 커밋 메시지를 저장하자.
- 다음과 같이 커밋을 거꾸로 실행하게 된다. 다만, 해당 커밋 시점의 되돌린 변경 사항이 이후 커밋들과 충돌이 발생하지 않은 경우이다. 이어서 충돌이 발생하는 경우를 알아보자.
Replace Lions with Leopards
커밋 기록에서leopards.yaml
을 수정한 기록이 있다.
- 이후 커밋 기록 중
Replace Cheetas with Panthers
에서leopards.yaml
을 수정했다. 즉Replace Lions with Leopards
를 revert 하는 순간, 이후 수정한 내역 때문에 충돌이 발생한다.
- 다음과 같이 충돌이 발생하여 경고 메시지가 출력되는 것을 볼 수 있다. 힌트를 읽어보면 충돌이 발생한 부분을 add 하거나 rm 한 후 revert를 사용하라고 한다.
- 우리가 원하는 방법은 삭제되는 것이므로
git rm leopards.yaml
명령어를 입력하고git revert --continue
를 입력한 후:wq
를 사용하여 커밋 메시지를 저장하자.
reset --hard 커밋해시
명령어를 사용하여revert
커밋 전으로 돌아가자.
git revert --no-commit 되돌릴 커밋 해시
- 원하는 다른 작업을 추가하고 싶은 경우가 있을 때 사용하며, 바로 커밋하지 않고 스테이징된 상태로 관리할 수 있는 방식이다.
- 취소하고 싶은 경우
git reset --hard
를 통해 지워주면 되므로 효율적인 방식이다.
SourceTree로 실습해보기
변경사항 만들기
leopards.yaml
삭제.gitignore
에*.config
추가hello.txt
추가 (내용 자유)- 커밋 메시지:
Commit with SourceTree
revert 실습
- 원하는 커밋 기록에서 우클릭 후 커밋 되돌리기를 누른다.
- 다음과 같이 revert가 된 모습을 볼 수 있다.
reset 실습
- 돌아갈 커밋 기록에서 우클릭 후
main를 이 커밋으로 초기화
를 누르고hard
모드로 변경하고 확인 버튼을 누르면 reset 된 모습을 볼 수 있다.
본 포스팅은 '인프런 - 제대로 파는 Git & GitHub - by 얄코' 강의를 보고 정리한 내용입니다.
반응형