포크를 동기화할 때 병합 커밋을 피하는 방법

이 기사는 원래 Everything DevOps에 게시되었습니다.

오픈 소스 프로젝트에서 작업할 때마다 일반적으로 원본 코드베이스의 복사본(a fork )을 유지합니다. 변경 사항을 제안하려면 Pull Request (PR)을 엽니다. PR을 생성한 후 검토 프로세스 중에 원본 코드베이스에 대한 커밋이 생성되어 포크를 동기화해야 할 가능성이 있습니다.

포크를 원본 코드베이스와 동기화하려면 이상적으로 Git 호스팅 서비스에서 제공하는 웹 UI를 사용하거나 이 Github tutorial에 표시된 대로 터미널에서 git fetchgit merge를 실행합니다. 그러나 PR이 열린 상태에서 그런 식으로 포크를 동기화하면 원치 않는 병합 커밋이 PR에 도입됩니다.

이 기사에서는 병합 커밋이 무엇인지, 포크를 원본 코드베이스와 동기화할 때 병합 커밋을 피하는 방법git rebase에 대해 알아봅니다.

병합 커밋이란 무엇입니까?



병합 커밋은 다른 커밋과 마찬가지로 특정 시점의 리포지토리 상태와 진화한 기록입니다. 그러나 병합 커밋에는 고유한 한 가지 사항이 있습니다. 최소 두 개의 부모 커밋이 있다는 것입니다.

병합 커밋을 생성하면 Git은 두 개의 별도 커밋의 기록을 자동으로 병합합니다. 이 병합 커밋은 충돌을 일으키고 병합된 PR에 있는 경우 프로젝트의 Git 기록을 엉망으로 만들 수 있습니다.



위 이미지의 주석 섹션은 두 개의 상위 커밋의 병합 커밋을 보여줍니다. 다음은 이미지에 대한 link to the merge commit입니다.

이제 병합 커밋이 무엇인지 알았습니다. 다음으로 포크를 원본 코드베이스와 동기화할 때 이를 피하는 방법을 배웁니다.

Git에서 포크를 동기화할 때 병합 커밋을 방지하는 방법.



**
병합 커밋을 방지하려면 아래 단계에 따라 원격 포크로 푸시하기 전에 로컬 포크의 원래 원격 코드베이스에서 변경 사항을 적용해야 합니다rebase.

1 단계:
아래 명령을 사용하여 코드베이스에서 변경 사항을 추적하고 가져오기 위해 원본 원격 리포지토리와 링크를 만듭니다.

$ git remote add upstream https://github.com/com/original/original.git

위의 명령을 실행하면 이제 두 개의 리모컨이 생깁니다. 하나는 포크용이고 다른 하나는 원래 코드베이스용입니다. $ git remote -v 를 실행하면 다음이 표시됩니다.

origin https://github.com/your_username/your_fork.git (fetch)
origin https://github.com/your_username/your_fork.git (push)
upstream https://github.com/original/original.git (fetch)
upstream https://github.com/original/original.git (push)

위에서 upstream는 포크를 생성한 원본 리포지토리를 나타냅니다.

2 단계:
이 단계에서는 다음을 사용하여 원격 업스트림의 모든 분기를 가져옵니다.

$ git fetch upstream

3단계:
다음으로 git rebase를 사용하여 포크의 마스터를 업스트림의 마스터로 다시 작성합니다.

$ git rebase upstream/master

4단계:
그런 다음 마지막으로 업데이트를 원격 포크로 푸시합니다. "--force"를 사용하여 강제로 밀어야 할 수도 있습니다.

$ git push origin master --force

메모:git fetch + git pullgit fetch를 사용하여 git merge 단계를 건너뛸 수 있지만 -- rebase 플래그를 사용하여 git merge를 무시할 수 있습니다. 끌어오기 명령은 다음과 같습니다.



$ git pull --rebase upstream master

결론



이 문서에서는 병합 커밋에 대해 알아보고 git rebase 를 사용하여 Git에서 포크를 동기화할 때 커밋을 방지하는 방법을 배웠습니다. 더 많은 정보를 얻을 수 있습니다git rebase. 자세히 알아보려면 다음 리소스를 확인하세요.
  • Git rebase official documentation
  • What is Git Rebase, and How Do You Use It?
  • Difference Between git merge and rebase
  • 좋은 웹페이지 즐겨찾기