호우동의 개발일지

Today :

article thumbnail

Amend

  • 가장 최근에 올린 커밋을 수정하는 명령어
  • 로컬 저장소까지만 Push 했을 때와 원격저장소까지 Push 했을 때까지 방법이 다름

 


SourceTree 로컬 저장소까지만 Push 했을 때

Push

README.md에 “8. 어멘드 추가”라는 텍스트를 추가해서 커밋메시지 없이 로컬저장소까지 커밋했다.

이를 다시 새로운 커밋로그를 만들지 않고 “8. 어멘드 추가”를 “8.add amend”로 바꾸고
커밋 메시지에 “어멘드 추가”를 넣고 싶다. 이때 amend를 사용할 수 있다.

우측 하단 Amend

방법은 간단하다.
일반적인 커밋과 마찬가지로 README.md에서 텍스트를 수정해 준 뒤 커밋메시지를 추가해 준다.

이후 커밋 이전에 Commit Options에 Amend last Commit을 눌러준다.
그럼 확인 문구가 뜨고, 확인 시 기존의 커밋 메시지인 no message가 뜰 것이다.

이를 내가 원하는 커밋 메시지인 어멘드 추가로 바꿔주면 된다.

정상적으로 추가된 것을 확인
정사적으로 추가된 것을 확인

그리고 다시 커밋을 누르면 경고문구가 뜨고 다시 확인을 누르면
정상적으로 새로운 커밋로그가 추가되지 않고

기존에 있던 no message 커밋 로그가 수정된 것을 확인할 수 있다.

 


SourceTree 원격 저장소까지 Push 했을 때

  • 원격저장소까지 Push 했다면 강제 푸시를 사용하여 이력을 조작해줘야 한다.
    • 강제 푸시를 사용한다는 것은 이 작업을 할 때는 나 혼자만 사용하고 있는 브랜치여야 한다는 뜻

강제 푸쉬 사용
강제푸쉬 사용 확인

Mac OS 기준 좌측 상단에 Preferences → Advanced → Allow force Push를 체크하면
Push 할 때 강제 푸시 체크박스가 활성화된다.

위의 로컬 저장소까지 했을 때와 똑같은 조건인데 이번에는 실수한 커밋을 원격저장소까지 Push 했다.

예시

즉, 이번에는 “1. add amend”를 다시 “1. 어멘드 추가”로 다시 바꾸고 싶다.
근데 이건 원격저장소까지 가있다.

하는 방법은 다른 건 다 똑같다.

똑같이 파일을 수정해 주고 커밋옵션에 amend last Commit 체크해 주고
commit 해주는 거 까지 똑같다.

그런데 원격 저장소에 Push를 하려니 오류가 뜬다. 이래서 강제 푸시를 사용해야 한다.

좌측 아래 맥기준
맥 기준

Push를 누르면 아래에 Force Push 체크박스가 있다.

이를 체크하면 강제 푸시가 가능하다.
이를 누르고 다시 Push 해보면 정상 실행된다.

잘 추가된 것을 확인 가능

SourceTree에서 로컬 저장소와 원격저장소까지 올라간 커밋을 Amend 하는 방법을 알아봤다.

 

 


Cherry-Pick

  • 다른 브랜치의 커밋 하나만 내 브랜치에 반영하는 것
    • 내가 원하는 커밋만을 선택해서 가져오는 것

 

사용 이유?

만약 해당 상황이 있다고 가정해 보자.
두 개발자가 브랜치를 나누어 작업을 하고 있다.

2가지 브랜치를 나눠서 작업하고 있을 때

 

브랜치 A에서 2번 버튼의 버그를 먼저 발견하여 수정을 하여 먼저 커밋을 하였다.

이후 브랜치 B에서 뒤늦게 2번 버튼 버그를 발견했다.
그럼 브랜치 B 개발자는 이미 브랜치 A에서 수정을 했으므로 커밋 3 - 1을 가지고 오기만 하면 된다.

그런데 문제가 하나 있다. 어떻게 가져올 것인가?이다.

병합 또는 리베이스로 가져와야 할 텐데 그러면 커밋 2-1도 같이 병합 가져와져 버린다.

그러면 커밋 3 -2에서 1번 버튼 버그를 수정한 것과 맞물려서
또 다른 버그를 일으킬 가능성이 엄청나게 크다.

그래서 병합 또는 리베이스를 사용하기는 힘들다. 이 때문에 Cherry-Pick을 사용하는 것이다.

체리픽을 사용하면 다음과 같이 된다.

커밋 따로 떼온 모습

이렇게 손쉽게 커밋 3-1만 따로 빼올 수 있다.

 


SourceTree Cherry-Pick

이런 상태로 ‘feature/b’ 브랜치에 ‘feature/a’에 있는 두 번째 버튼만 가져와보겠다.

예시 커밋

feature/b 브랜치에 있는 상태에서
가져오길 원하는 두 번째 버튼 커밋에 오른쪽 마우스를 눌러 Cherry Pick을 클릭한다.

체리픽 경로
체리픽

첫 번째 체크박스는 커밋 메시지에 커밋 아이디 포함?
두 번째는 병합 성공 시 바로 커밋하는 것이다.

정상적으로 확인 가능

정상적으로 두 번째 커밋과 연결된 다른 커밋은 안 가져오고
두 번째 커밋만을 가져오는 것을 확인할 수 있다.

여기서 중요한 점은 변경사항은 복사해 왔지만 서로 같은 커밋은 아니라는 점이다(ID는 다르다는 뜻)