실제로 먼저 병합하지 않고 병합을 테스트하는 방법
시뮬레이션을 할 수 있는 방법이 있습니까?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 |