코딩항해기

[리뷰/우아한테크] 유용한 Git 명령어 본문

IT tech

[리뷰/우아한테크] 유용한 Git 명령어

miniBcake 2024. 6. 25. 23:47

 

https://youtu.be/jXtUUm92RiQ?si=33ozG6WydvSDXh14

 

git을 사용할 때 add. commit push로 주먹구구 방식처럼 사용하는 것 같아 관련 지식을 늘리고자 우아한테크의 유용한 git 명령어 영상을 시청하게 되었다.

add, commit, push의 특징

브랜치가 앞으로 진행되는 명령어이다.

add . commit을 진행하게되면 브랜치가 생성되고, 생성될 때마다의 기록을 남기며 앞으로 나아가게 된다.

이 때 진행한 내용을 취소하고 싶다면 수동으로 복구도 가능하지만,

  1. 실수가 발생할 수 있다.
  2. 커밋로그가 지저분해진다.

등의 단점이 있다.

1.  [git reset]으로 해결해보기(X)

이 때 시도해 볼 수 있 git 명령어는 git reset이다.

git reset : 이전 커밋 상태로 되돌아갈 수 있다.

ex) git reset HEAD^

* 로컬 헤드가 직전 커밋으로 이동

 

[이동한 과거시점의 커밋에서 없는 데이터를 어떻게 처리할지 결정하는 명령어]

git reset —hard 변경사항을 삭제  
git reset —mixed 변경사항을 unstaged 상태로 유지 디폴트값
git reset —soft 변경사항을 staged 상태로 유지  

 

직전 상태로 돌아간 뒤 (git reset) commit을 하게 되면 새로운 분기가 생겨나게 된다.

이 상태에서 push를 진행하게 된다면 오류가 발생하게 된다.

(로컬 메인브랜치와 원격 메인브랜치 상태가 다르기 때문)

2.  [git commit —amend] —amend 옵션으로 해결해보기(X)

git commit —amend : 직전의 커밋을 수정할 수 있다.

커밋 메세지를 변경하거나 변경 내용을 추가할 수 있다.

ex) git commit —amend -m “메세지”

 

—amend를 이용하여 수정 후 push하게 되면 다시 오류가 발생하게 된다.

상단의 reset 명령어와 마찬가지로 수정을 거치며 분기가 갈라지게 되었고,

로컬 메인브랜치와 원격 메인브랜치의 상태가 달라지게 되었기 때문이다.

(어멘드 옵션은 기존 커밋을 덮어쓰기 때문이다. 삭제 생성)

 

Q. 그렇다면 -f 강제로 업로드하는 방식은 어떨까?

A. 여러 명이 관리하는 원격 저장소일 경우 큰 문제 발생!!!

 

git은 push하여 충돌을 해결하는 것보다는 예방하는 편이 낫다. ( >> 시간절약)

3.  [git revert]로 해결해보기 (OOO)

git revert : 특정 커밋의 변경 내용을 되돌릴 수 있다.

특정 커밋의 변경 내용을 되돌릴 수 있다. 그러나 다른 점은 새로운 커밋을 생성한다.

 

git revert 사용하기

  1. 수정할 커밋의 해시값 확인 (예를 들어 3번째 커밋)
  2. git revert 해시값 (3번째 커밋의 해시값)
  3. 새로운 커밋이 생성됨 (2번째 상태로 커밋)

만약 이미 푸쉬한 커밋을 삭제해버렸다면?

(위의 예시에 따르면 3번째 커밋을 삭제한 경우)

[git reflog]를 사용하자!

git reflog : 변경 이력을 기록한 로그

사용하게 되면 기존의 로그가 나열되게 된다.

 

git reflog 사용법

  1. git reflog로 돌아가기 원하는 시점을 찾는다.
  2. git reset —hard {시점} 을 실행한다.
  3. 로컬의 파일, 원격 브랜치의 커밋이 복구된다.

 

결론 : 정확하게 어떤 명령어이고 어떤 방식인지 알아야 충돌없이 사용할 수 있다!