programing

실제로 먼저 병합하지 않고 병합을 테스트하는 방법

magicmemo 2023. 7. 10. 22:14
반응형

실제로 먼저 병합하지 않고 병합을 테스트하는 방법

시뮬레이션을 할 수 있는 방법이 있습니까?git merge현재 작업 중인 지점과 마스터인 두 지점 사이에서, 그러나 변경하지 않고?

저는 종종 갈등을 겪습니다.git merge먼저 병합을 시뮬레이션할 수 있는 방법이 있습니까?

사용할 수 있습니다.git merge --no-commit병합이 실제로 수행되지 않도록 하고 병합이 수행되는 방식이 마음에 들지 않으면 원래 헤드로 재설정합니다.

병합을 완료하지 않으려는 경우 빠른 전달(따라서 충돌이 없는 경우 정의에 따라)을 추가할 수 있습니다.--no-ff뿐만 아니라.

병합을 시도하기 전까지는 무슨 일이 일어날지 시뮬레이션할 방법이 없다고 생각합니다.그러나, 만약 당신이 출력을 확인한다면.git status병합하기 전에 비어 있습니다. 병합을 시도하는 것이 안전합니다.충돌이 발생하면 다음과 같이 즉시 이전 상태로 돌아갈 수 있습니다.

git reset --merge

git 1.7.4 이후에는 다음을 수행하여 병합을 중단할 수도 있습니다.

git merge --abort

(해당 옵션을 추가한 커밋 메시지가 설명하듯이, 이는 다음과 같은 일관성을 위해 추가되었습니다.git rebase --abort등등.)

주제 분기의 변경사항을 마스터와 비교하려면 다음 작업을 가장 쉽고 안전하게 수행해야 합니다.

git checkout master
git checkout -b trial_merge
git merge topic_branch

병합을 완료하면 마스터에서 통합된 변경 내용을 쉽게 확인할 수 있습니다.

git diff master

완료되면 trial_merge 브랜치를 삭제합니다.

git checkout master
git branch -D trial_merge

이렇게 하면 마스터 분기는 변경되지 않습니다.

제가 찾은 솔루션은 다음과 같습니다.git merge-tree는 "메모리 내"를 병합하고 작업 디렉터리를 건드리지 않고 디프를 인쇄합니다.분기를 확인하지 않고 테스트할 수도 있습니다.

병합 diff 가져오기

먼저 저장소가 모든 원격 분기에 대해 알고 있는지 확인하려면 다음 작업을 수행합니다.

$ git fetch --all

이제 이 bash 스니펫을 사용하여 분기 방법을 확인합니다.$branch 로 병합될 것입니다.$master:

$ branch='feature'
$ git merge-tree $(git merge-base $branch master) master $branch

작업 일지 또는 색인은 변경되지 않습니다.임시 합병입니다.

출력에서 정보 선택

출력이 다릅니다.분기가 병합된 경우 해당 분기는 비어 있습니다.

충돌 여부를 확인하려면 다음 항목에 대해 확인합니다.<<<:

$ git merge-tree $(git merge-base $branch master) master $branch | fgrep '<<<'

충돌 차이를 추출하려면 다음 사이의 선을 추출하는 데 사용합니다.<<<그리고.>>>:

$ git merge-tree $(git merge-base $branch master) master $branch | \
  sed -ne '/^\+<<</,/^\+>>>/ p'

특징들

  • 분기가 이미 병합된 경우 디프가 비어 있습니다.
  • grep/sed를 사용하여 충돌 정보 추출
  • 사용하다origin/feature당신이 한 번도 일해본 적이 없는 지점들을 테스트하기 위해.
  • 두 분기가 어떻게 분기되었는지 확인하는 데 사용할 수 있습니다.

즐겨찾기에 추가

병합의 디프를 가져옵니다.

git config --global alias.sysiff '!f(){branch="$1"; into="$2"; git 병합 트리 $(git 병합 기반 "$base" "$into") "$into" "$into"; }; f'

용도:

$ git mergediff <feature-branch> <merge-into>
$ git mergediff feature master

병합 충돌 가져오기:

git config --global alias.mergetest'!f() {git mergediff $@ | sed -ne "/^+<///^+>/"; };f'

용도:

$ git mergetest <feature-branch> <merge-into>
$ git mergetest feature master

그냥 일회용 분기(git checkout -b)를 만들고 거기서 테스트 병합을 하는 것이 어떻습니까?

사용:

git merge --ff-only

설명서에 따라:

현재 HEAD가 이미 최신 상태이거나 병합을 빠른 전달로 확인할 수 없는 경우 0이 아닌 상태로 병합 및 종료를 거부합니다.

두 분기 간에 충돌이 없는 경우 빠른 병합이 발생하기 때문에 실제 시뮬레이션은 아닙니다.그러나 충돌이 발생하면 알림을 받고 아무 일도 일어나지 않습니다.

나는 사용할 수 있었습니다.git merge --abort, 병합 할 수 그러나 병합 충돌이 있는 경우에만 사용할 수 있습니다.커밋하지 않으려는 경우 위에 언급된 다른 방법을 사용합니다.

당신의 경우인지는 정확히 모르겠습니다만, 당신의 질문은 제가 가끔 장편을 시작하고, 며칠에 걸쳐 커밋하고, 여러 번 그것에 대한 개발을 병합한다는 것을 기억합니다.

이 시점에서 나는 내가 변경한 정확한 파일에 대한 제어권을 상실하고 내 기능이 닫히고 코드가 개발될 때만 알 수 있습니다.

이 경우 병합에서 제외된 수정 사항을 확인하는 좋은 방법은 원본 트리를 사용하는 것입니다.

기본 분기에서 오른쪽 버튼으로 클릭하고 다음을 선택해야 합니다.Diff Against Current:

Sourcetree's feature to know the diff between two branches

그러면 원본 트리는 분기를 기본 분기로 병합할 경우 병합될 모든 수정 사항을 보여줍니다.

Results

물론 충돌은 표시되지 않지만 병합 시 유용한 도구입니다.

언급URL : https://stackoverflow.com/questions/7484199/how-to-test-a-merge-without-actually-merging-first

반응형