[Git] 시간 여행하기

박세윤·2022년 10월 15일
0
post-thumbnail

인프런 강의를 보고 공부한 글입니다.
https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EA%B9%83/dashboard


📋 시간 여행하기


📌 변화를 타임캡슐에 담아 묻기


☑️ 변경사항 저장

git status
  • 확인은 했지만, commit 즉, 아직 git이 관리하지는 않았다, 버전안에 넣지는 않았다. (untracked file)

☑️ 특정 파일 담기

  • 특정 파일 하나를 담아보자.
git add {파일이름}

git add를 입력한 후, 다시 git status를 입력해보자.

Chances to be comitted는 버전에 담을 준비가 되었다는 것이다.


☑️ 모든 파일 담기

  • 특정 파일 하나씩 말고, 파일 전체를 담아보자.
git add .

그리고 git status로 확인해보자.


☑️ 저장하기

  • 위에서 add 했던 파일들을 git 저장소에 저장해보자.
git commit

이 때 리눅스의 vim을 활용할 줄 알아야 한다.

git commit 명령어 입력 후, vim의 입력모드에 들어 간 다음 FIRST COMMIT!이라고 치고 저장하고 나왔다.

그렇다면 위와 같은 메시지가 출력된다.


git status 를 입력하면, add 했던 파일들이 모두 저장소에 올라갔으므로, 아래와 같이 빈 상태일 것이다.


사실 리눅스 vim 필요 없이 commit 명령어 사용 시 커밋 메시지를 한번에 지정할 수도 있다.

git commit -m "FIRST COMMIT"

☑️ commit한 것을 확인해보기

git log

commit했던 기록 (로그)를 확인할 수 있다!


또한 SourceTree에서도 commit 기록을 확인할 수 있다.


☑️ 파일 상태 변경 후

  • 파일 하나를 삭제하고, 하나의 파일은 내용을 변경했으며, 새로운 파일 하나를 추가했다. 이 땐 어떤 일이 일어날까?

git status로 확인해보니, 삭제, 변경, 추가된 사실을 알려준다.


git status보다 더 자세하게 변경점을 알려주는 명령어가 있다.

git diff


그럼 이제 변경한 후, add와 commit을 해보자.


이를 git log로 확인해보자!

두가지 버전이 log에 찍혀있는 것을 알 수 있다.


역시 SourceTree에서도 확인할 수 있다.


🔎 add와 commit을 한번에 하기

git commit -am "메시지"

단, 새로추가된 파일(Untracked file)이 없을 때만 사용 가능하다!!



📌 과거로 돌아가는 두 가지 방법

  • 프로젝트를 이전 버전(과거 시점)으로 돌리는 방법은 두 가지가 있다.

☑️ Reset

  • 말 그대로 시간을 과거로 되돌리는 것
    • 해당 과거로 돌아간 다음, 이후 행적은 history에서 지움.

☑️ Revert

  • 해당 시점을 반대로 변경시켜, 그 원래 자리에 넣는다.
    • 결과적으로 기존 때와 같은 상태로 돌아간다.
    • 이런 변경 행위 하나하나를 기록하면 좋을 때 하면 좋다. (reset은 그냥 지워버리니..)
    • 변경해야하는 부분만 변경하고, 이외의 부분은 그대로 유지하고 싶을 때 사용
    • reset은 협업 시 문제가 생길 수 있음. (충돌)
      -> 한번 공유가 된 커밋들은 Revert로 되돌려야 한다!!



📌 과거로 돌아가기

이번 챕터 학습 전, 프로젝트 폴더의 .git 폴더를 복사붙여넣기를 통해 백업해놓자 미리!


우선, 이전 커밋 내역을 확인해보자

git log

☑️ Reset 해보기

git reset --hard (돌아갈 커밋 해시)

여기서 돌아갈 커밋 해시란, git log를 통해 확인할 때, commit 이라고 적힌 것 옆의 암호


프로젝트 폴더의 .git 폴더를 삭제하고, 미리 백업해둔 .git 폴더를 복사 붙여넣기로 프로젝트 폴더에 넣어보자.

그 후, SourceTree를 확인해보자.

그리고 git status를 입력해보자.

git이 착각하는 것!

이 때, reset 하기 전 상태로 복원해보자

git reset --hard

reset하기 전 시점으로 복원이 되었다!


☑️ revert 해보기

git revert (되돌릴 커밋 해시)


이 상태 (vim)로 들어오는데, 이미 돌리고 싶을 때 상태의 커밋 메시지가 입력되어 있다.
따라서 특별히 더 적을게 없다면 그냥 저장하면 된다.

SourceTree를 확인하면,

굵은 글씨로 Revert "Add George to Tigers"라고 적힌 커밋이 새로 생긴 것을 알 수 있는데, 이것은 Add George to Tigers의 반대 행동이다. (George 삭제)

다른 커밋과는 상관 없이 그냥 중간 변경하고 싶은 커밋만 가져온다는 뜻이다.


이 상태에서, Replace Lions with Reopards로 revert를 활용하여 커밋을 되돌리고 싶다.

근데 이후에 leopards.yaml을 수정한 다른 commit이 있기에, 그 커밋과 충돌이 발생한다.

따라서, leopards.yaml 파일을 삭제해야 한다.

git rm leopards.yaml

☑️ revert는 하는데, commit은 하지 않은 상태로 만드는 방법

git revert --no-commit (되돌릴  커밋 해시)
  • 이번 commit에서, revert하는 것 뿐만 아니라 다른 행위를 추가하고 싶을 때 사용



📌 reset과 revert를 SourceTree로 진행해보기


☑️ SourceTree로 add 하기

  • 위 변경사항 세가지를 모두 스테이지 올리기 버튼 또는 각각 플러스 버튼을 눌러 git add 과정을 소스트리에서 직접 수행할 수 있다.
    • 위 과정을 수행하면 아래 사진과 같은 상태가 된다.


☑️ SourceTree로 커밋 하기

  • 소스트리 좌측 상단의 커밋 버튼을 통해 커밋 과정을 진행할 수 있다.

☑️ SourceTree로 Revert 하기

  • revert하고 싶은 시점을 우클릭 한 후 커밋 되돌리기를 누르면 된다.

☑️ SourceTree로 Reset 하기

  • reset하고 싶은 시점을 우클릭 한 후 이 커밋까지 현재 브랜치를 초기화 버튼을 누른 후, hard로 설정하면 된다.
profile
개발 공부!

0개의 댓글

관련 채용 정보