Program Club

Git을 사용하여 자동 병합을 방지하려면 어떻게해야합니까?

proclub 2020. 12. 30. 08:21
반응형

Git을 사용하여 자동 병합을 방지하려면 어떻게해야합니까?


Git에서 자동 병합을 수행하지 않고 로컬 분기를 마스터 분기에 병합하려고합니다. 마스터에 병합하고 싶은 것을 "손으로 선택"하고 싶습니다.

Git의 difftool 명령을 사용하면 마스터 브랜치에 추가 할 항목을 비교하고 선택할 수 있습니다. 그러나 병합을 수행하면 Git이 자동 병합을 수행하기 때문에 이전에 선택한 것을 잃게됩니다. 병합 전에 마스터에 변경 사항을 적용 할 수 있지만 그렇게하는 것은 부자연스러워 보입니다.

그리고 Git의 mergetool은 병합으로 인한 충돌이있을 때만 사용할 수 있습니다. 그러나 Git이 자동 병합을 수행하면 일반적으로 충돌이 없으므로 mergetool 명령을 실행할 수 없습니다.

최신 정보:

나는 내가 달성하려는 것이 나쁜 습관이거나 불가능하다고 생각하기 시작했습니다. 즉, 토픽 브랜치를 병합하고 diffing에서 필요한 것만 병합합니다. 또한 이것을 역사에 반영했습니다. 어쨌든 내가 게시 한 질문은 Git을 실험 할 때 떠올랐다.


병합 프로세스에 관여하는 Git을 우회하고 병합 할 각 수정 된 파일의 각 줄을 직접 선택하려고합니다. 이것은 git cherry-pick. 어느 쪽도 git merge --no-commit도움 이되지 않습니다 . 다음을 수행해야합니다.

$ git checkout master
$ git difftool -t kdiff3 local-branch HEAD

에서 KDiff3창 왼쪽은 ( A) 당신입니다 로컬 지점 과 오른쪽은 ( B) 당신입니다 현재 지점 (마스터) .

메뉴 Merge | Merge Current File에서 선택하십시오 (또는 동일한 제목의 화려한 다이아몬드 모양 아이콘을 누르십시오).

그러면 각 파일에 대한 차이점과 충돌 (있는 경우)이 표시됩니다. 그리고 왼쪽 또는 오른쪽 ( A또는 B) 또는 둘 다를 선택하거나 병합 된 파일을 수동으로 조정할 수 있습니다.

또 다른 메모에서 워크 플로에 더 큰 문제가 있다는 내용이 있습니다.


git merge --no-commit --no-ff <local-branch>

해.

실행하면의 변경 사항 local-branch이 적용되지만 아직 준비되지는 않습니다.

그런 다음 적용 할 변경 사항을 확인하고 모든 변경 사항을 적용하려는 경우

git commit -a 

그렇지 않으면 가져올 파일을 선택하고 스테이징 한 다음 git add마지막으로 git commit. 그런 다음 git checkout -- filename.


자동 병합을 신뢰하지 않는 경우이 작업을 원할 수 있습니다. 파일의 다른 위치에서 두 번 편집 (다른 분기에서 수행됨)하면 자동 병합으로 인해 충돌이 발생하지는 않지만 실제로 작동하지 않을 수 있습니다. 함께.

사용자 지정 병합 드라이버 사용을 살펴볼 수 있습니다. 이 페이지는 그것에 대해 설명합니다.

Git-선택한 파일에서 병합 충돌 및 수동 병합을 강제하는 방법

대안은 병합을 수행하기 전에 먼저 브랜치간에 다른 파일을 찾은 다음 파일을 적절한 브랜치로 체크 아웃하여 두 편집 중 하나 또는 다른 하나를 포함하는 기능 코드와 깨끗한 병합을 얻는 것입니다.

git diff --name-only <branch1> <branch2> 
git checkout <branch1> -- <paths>

개별 변경 사항을 선택 하고 싶습니다 .

git checkout master
git log --reverse --oneline topic ^master

그런 다음 git cherry-pick마스터 브랜치에 포함하려는 각 커밋에 대해 호출 합니다.

토픽 브랜치의 나머지 변경 사항을 유지해야하는 경우 새 마스터 위에이 브랜치를 리베이스 할 수도 있습니다.

git rebase master topic

참조 URL : https://stackoverflow.com/questions/5235010/how-do-i-prevent-an-automerge-using-git

반응형