실제로 먼저 병합하지 않고 병합을 테스트하는 방법
시뮬레이션을 할 수 있는 방법이 있습니까?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:
그러면 원본 트리는 분기를 기본 분기로 병합할 경우 병합될 모든 수정 사항을 보여줍니다.
물론 충돌은 표시되지 않지만 병합 시 유용한 도구입니다.
언급URL : https://stackoverflow.com/questions/7484199/how-to-test-a-merge-without-actually-merging-first
'programing' 카테고리의 다른 글
| 이 3차 조건부입니까?: 올바른(목표) C 구문입니까? (0) | 2023.07.10 |
|---|---|
| 100% 높이를 파괴하는 Wordpress 관리자 표시줄을 수정하는 방법 (0) | 2023.07.10 |
| Git 병합 오류 " 병합되지 않은 파일이 있으므로 커밋할 수 없습니다." (0) | 2023.07.10 |
| Firestore 쿼리 문서 시작끈 포함 (0) | 2023.07.10 |
| 유형 스크립트 결합 유형에서 다른 속성 액세스 (0) | 2023.07.05 |

