깃허브에 PR을 잘못했는데 Merge까지 해버린 경우가 있어서 해당 PR을 제거할려고 시도한 경험이 있습니다.

이러한 PR을 완전히 제거하는 방법은 생각보다 간단합니다.

 

https://support.github.com/request

 

해당 링크로 들어가서 다음 과정을 수행하면 됩니당.

 


잘못 올린 PR 완전히 제거하기

 

1. '내가 가지고 있거나 제어하는 리포지토리에서 데이터 제거하기'를 클릭합니다. 

 

 

2. 끌어오기 요청 제거하기를 클릭합니다.

 

3. 여러개의 PR을 제거하고 싶다면 Multiple, 하나의 PR을 제거하고 싶다면 Single을 선택하면 됩니다.

 

4. 이후 해당 질문이 왔을때, PR을 제거할려고 하는 repository의 주소를 입력해줍니다.

 

5. 삭제할려고 하는 PR의 번호를 작성하면 2시간 이내에 삭제가 됩니다.


 

하지만, 저는 위와 같은 메세지를 받았고, PR이 삭제되지 않았습니다.

위의 답변을 보면 알 수 있듯이 삭제할려는 PR과 연관된 브랜치에서 각 PR에 대한 commit을 삭제해줘야 PR을 완전히 삭제할 수 있는데 해당 작업이 시행되어 있지 않았기 때문이었습니다. 이를 위해선 삭제할려는 PR이 있는 repository를 클론하고 git-filter-repo BFG Repo-Cleaner 를 이용하여 PR과 연관된 각 브랜치에서 commit을 삭제해줘야합니다.

 

 

git-filter-repo를 이용해 제거한 과정을 정리해볼려고 합니다.

 


1. repository 클론하기

git clone --mirror https://github.com/your-repository.git
cd your-repository.git

 

--mirror를 사용하는 주요 이유는 다음과 같습니다:

  1. 모든 브랜치와 태그 포함: 전체 저장소의 모든 브랜치와 태그를 포함하여 완전한 복사본을 만듭니다. 이는 특정 커밋을 모든 브랜치와 태그에서 제거하려는 경우 필수적입니다.
  2. 원격 참조 유지: 원격 저장소의 모든 참조를 로컬에 그대로 복사하므로, 원격 저장소의 구조를 로컬에서 정확히 재현할 수 있습니다.
  3. 작업 편의성: git filter-repo와 같은 도구를 사용하여 모든 브랜치와 태그에서 커밋을 제거하는 작업을 한 번에 수행할 수 있습니다

 

2. git-filter-repo 설치

pip install git-filter-repo

 

 

3. 제거할려고 하는 커밋 확인 

git log

 를 이용해 제거할려는 커밋의 해시를 알아냅니다.

 

4. 제거할려는 커밋의 해시를 입력해 해당 커밋 삭제

git filter-repo --commit-callback 'if commit.hash == b"{커밋 해시}": commit.ignore = True'

# 예시
git filter-repo --commit-callback '
def callback(commit, metadata):
    if commit.original_id == b"27d6475280e0d347d8bc88e4edcb149bad3fb248":
        commit.ignore = True
'

 

5. 깃허브 저장소 주소 연결

git remote add https://github.com/your-repository.git

 

6. push

git push --force --all

 


위의 방법으로 삭제할려고 하는 PR과 관련된 커밋을 각 브랜치에서 삭제할 수 있습니다. 이렇게 처리한 뒤에 문의할 때 제공받은 티켓에서 댓글로 삭제했다고 연락하면 담당자가 PR을 완전히 제거해 줍니다. 이상입니다. 글 읽어주셔서 감사합니다.

+ Recent posts