Git | GitLab

[Git] 특정 커밋만 푸시

비번변경 2024. 7. 2. 17:04

개요

특정 커밋만 브랜치에 적용할 때는 2023.04.21-[Git] cherry-pick - 특정 커밋 반영 명령어를 사용할 수 있는데, cherry-pick하는 것이 아니라 commit을 push 하는 단계에서 push 할 커밋만 지정할 수 있으면 한다.

방법을 적어둔다.

 

 

방법

일단 git push를 사용할 때 아래와 같은 명령어를 사용한다.

git push <remotename> <commit SHA>:<remotebranchname>

# 예시
git push origin 8b43c99:main
git push origin 8b43c99:refs/heads/commit_push

다만 제한사항이 좀 있는 것 같다. 먼저 push 명렁은 기본적으로 지정한 커밋을 포함한 모든 커밋을 Push 하기 때문에 하나의 커밋만을 push 하기 위해서는 push 할 커밋이 첫 번째 커밋이 되어야 한다. 따라서 필요에 따라 git rebase -i 명령을 사용하여 커밋 이력을 조정해야 할 수 있다.

다음으로 일단 기본적으로 이미 원격지에 생성되어 있는 브랜치에 Push 할 수 있다. 원격지에 브랜치를 생성하면서 Push하기 위해서는 ref/head/<branch_name> 형식으로 target 브랜치를 지정해야 한다.

 

 

테스트

다음과 같이 원격지에서 클론 받은 후 하나의 커밋을 추가한 상태라고 하자.

현재 로컬 저장소에 여러 커밋을 추가하지 않아 별도의 커밋 순서를 조정할 필요는 없다.

현재 브랜치 상태가 위와 같다고 할 때, 커밋을 신규 원격 브랜치로 push하려고 하면 아래와 같은 오류가 발생한다.

git push origin 8b43c99:commit_push

원격지에 commit_push라는 브랜치가 없어서 에러가 발생하고 있다.

 

이제 원격지에 새 브랜치를 만들면서 push하도록 target_branch를 다음과 같이 지정한다.

git push origin 8b43c99:refs/heads/commit_push

정상적으로 잘 Push되었다. 웹에서 원격지 상태를 확인해 보면 원하던 커밋이 잘 Push 된 것을 확인할 수 있다.

 

 

참고 문서

https://stackoverflow.com/questions/3230074/how-can-i-push-a-specific-commit-to-a-remote-and-not-previous-commits

https://www.delftstack.com/ko/howto/git/git-push-specific-commit/