제육's 휘발성 코딩
반응형

버전 관리

image

  • 이전의 생성한 파일 중 하나를 타임캡슐에 담아보자. 기존에 관리하지 않는 파일들은 빨간색으로 추적하지 않는 파일이라고 명시되어 있고, git add tigers.yaml 명령어를 통해 스테이징된 것을 볼 수 있다.

image

  • 모든 파일을 담고 싶은 경우 git add . 을 통해 모든 파일을 스테이징할 수 있다.

타임캡슐 묻기

image

  • 모든 파일이 스테이징 된 채로 커밋을 해보자. 여기서 -m 의 의미는 커밋 메시지를 담는 것으로 git commit만 사용했을 때 vi 편집기가 열리면 해당 내용에서 메시지를 입력후 저장하는 과정을 거쳐야한다. 이 과정을 생략하고 사용할 수 있도록 지원하는 명령어이다.

 

image

  • git log 명령어를 입력해보면 다음과 같이 커밋 기록을 확인해볼 수 있다.

 

image

  • SourceTree에서도 다음과 같이 커밋한 기록과 메시지를 볼 수 있다.

 

team: Leopards

manager: Luke

members:
- Linda
- William
- David
  • lions.yaml 파일 삭제
  • tigers.yaml의 manager를 Donald로 변경
  • leopards.yaml 파일 추가

 

image

  • 파일의 추가, 변경, 삭제 모두 git status에서 관리하는 것을 볼 수 있다.

 

image

  • git diff 명령어를 사용하면 변경사항을 더 자세하게 볼 수 있다. (화면은 j로 내리고 k로 올릴 수 있다.)

 

image

  • git commit -am "message"를 통해 스테이징과 커밋을 동시에 처리할 수 있다. 단, untracked 파일이 없을 때에 한해서 가능하다.

추가 커밋들

  • Tigers의 membersGeorge 추가
  • 커밋 메시지: Add George to Tigers
team: Cheetas

manager: Laura

members:
- Ryan
- Anna
- Justin
  • cheetas.yaml 추가 (커밋 메시지 : Add team Cheetas)
  • cheetas.yaml 삭제
  • Leopards의 managerNora로 수정

 

team: Panthers

manager: Sebastian

members:
- Violet
- Stella
- Anthony
  • panthers.yaml 추가 (커밋 메시지 : "Replace Cheetas with Panthers")

 

image

  • git log를 보면 다음과 같다.

 

과거로 돌아가기 (Reset vs Revert)

reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지운다.

revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행한다.

reset 실습

실습을 하기 전에 .git 폴더를 복사해서 별도의 위치에 저장해두자.

image

git reset --hard (돌아갈 커밋 해시)
  • Add team Cheetas의 커밋으로 돌아가는 실습을 진행해보자. 이전에 git log를 통해 볼 수 있는 커밋 해시를 복사하자. 해당 명령어 실행 시 해당 커밋시점으로 돌아가며, 이후 내역들은 지워진다.

 

image

  • 첫 번째 커밋기록으로 reset 하고 git log로 확인해보면 이후 내역이 지워진 것을 확인할 수 있다. 백업해둔 .git 폴더를 가져와 덮어쓰자.

 

image

  • 원래대로 덮어썼지만 변경사항이 발생했다. 이유는 첫 번째 커밋사항에서 내용이 마지막 커밋사항으로 변경되었기 때문이다.
  • git reset --hard 를 사용하면 가장 마지막 커밋을 가리킨다. 해당 명령어를 입력하고 lions.yaml (마지막 커밋 기준 삭제했던 파일)을 삭제하면 변경사항이 사라진 것을 확인할 수 있다.

revert 실습

git revert (되돌릴 커밋 해시)
  • Add George to Tigers 커밋 해시로 돌아가보는 실습을 진행해보자.

 

image

  • 명령어를 입력하면 다음과 같이 커밋 메시지가 나온다. :wq로 커밋 메시지를 저장하자.

 

image

  • 다음과 같이 커밋을 거꾸로 실행하게 된다. 다만, 해당 커밋 시점의 되돌린 변경 사항이 이후 커밋들과 충돌이 발생하지 않은 경우이다. 이어서 충돌이 발생하는 경우를 알아보자.

 

image

  • Replace Lions with Leopards 커밋 기록에서 leopards.yaml 을 수정한 기록이 있다.

 

image

  • 이후 커밋 기록 중 Replace Cheetas with Panthers에서 leopards.yaml을 수정했다. 즉 Replace Lions with Leopards 를 revert 하는 순간, 이후 수정한 내역 때문에 충돌이 발생한다.

 

image

  • 다음과 같이 충돌이 발생하여 경고 메시지가 출력되는 것을 볼 수 있다. 힌트를 읽어보면 충돌이 발생한 부분을 add 하거나 rm 한 후 revert를 사용하라고 한다.

 

image

  • 우리가 원하는 방법은 삭제되는 것이므로 git rm leopards.yaml 명령어를 입력하고 git revert --continue를 입력한 후 :wq를 사용하여 커밋 메시지를 저장하자.

 

image

  • reset --hard 커밋해시 명령어를 사용하여 revert 커밋 전으로 돌아가자.

 

git revert --no-commit 되돌릴 커밋 해시
  • 원하는 다른 작업을 추가하고 싶은 경우가 있을 때 사용하며, 바로 커밋하지 않고 스테이징된 상태로 관리할 수 있는 방식이다.
  • 취소하고 싶은 경우 git reset --hard를 통해 지워주면 되므로 효율적인 방식이다.

 

SourceTree로 실습해보기

변경사항 만들기

image

  • leopards.yaml 삭제
  • .gitignore*.config 추가
  • hello.txt 추가 (내용 자유)
  • 커밋 메시지: Commit with SourceTree

 

revert 실습

image

  • 원하는 커밋 기록에서 우클릭 후 커밋 되돌리기를 누른다.

 

image

  • 다음과 같이 revert가 된 모습을 볼 수 있다.

 

reset 실습

image

  • 돌아갈 커밋 기록에서 우클릭 후 main를 이 커밋으로 초기화를 누르고 hard 모드로 변경하고 확인 버튼을 누르면 reset 된 모습을 볼 수 있다.

본 포스팅은 '인프런 - 제대로 파는 Git & GitHub - by 얄코' 강의를 보고 정리한 내용입니다.

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^