Nice programing

Git에서 모든 파일을 수동으로 병합하는 방법은 무엇입니까?

nicepro 2020. 11. 29. 12:18
반응형

Git에서 모든 파일을 수동으로 병합하는 방법은 무엇입니까?


meld 또는 다른 diff 도구 를 사용하여 모든 파일을 수동으로 병합하고 싶습니다. Git으로 어떻게 할 수 있습니까?
내가 실행 git mergetool하면 no files need merging. 그래서 갈등이있을 때만 할 수 있다고 생각합니다.


훨씬 더 간단한 방법이 있습니다.

git merge --no-commit merge_branch

남자가 말했듯이 :

함께 --no-commit병합을 수행하지만, 척 실패 병합 및 자동 커밋하지 않는 사용자에게 검사 및 추가 커밋하기 전에 병합 결과를 조정할 수있는 기회를 제공합니다.


다음과 같은 시나리오가 있습니다.

git merge --no-commit merge_branch 

빨리 감기를 일으켰습니다.

이 경우 다음을 사용할 수 있습니다.

git merge --no-commit --no-ff merge_branch

그러면 변경 사항을 검토 할 수 있습니다.


비슷한 질문은 git을 사용하여 자동 병합을 방지하는 방법입니다.

FractalSpace는 내가 유용하다고 생각하는 답변을 제공했습니다.

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

아이디어는 자동 병합 도구 대신 difftools를 사용하여 필요한 것을 수동으로 선택하고 새 파일을 만드는 것입니다.


수동으로 병합해야하는 경우 (아마도 특정 파일 클래스에 대해) 병합 드라이버를 정의 할 수 있습니다 .
" Git-선택한 파일에 병합 충돌 및 수동 병합을 강제하는 방법 "에 구체적인 예가 있습니다.

이렇게하면 병합 드라이버 스크립트가 원하는 병합 도구를 호출 할 수 있습니다.


여기에 와서 사용 git difftool하는 @True 의 답변 사용 하는 다른 답변 의 차이점에 대해 궁금해하는 사람 git mergeGit mergetool 대 difftool을 참조하십시오 .

간단히 말해서, diff.toolkdiff3, meld 또는 vimdiff와 같은 최신 버전을 사용하도록 git을 구성한 경우 diff 도구 자체를 사용하여 다른 파일을 수동으로 병합 할 수 있으며 명령 줄은 간단 할 수 있습니다.

git difftool other_branch

... 이렇게하면 현재 브랜치와 other_branch (에서 $ LOCAL 및 $ REMOTE로 설명 됨)간에 양방향 수동 병합을 수행 할 수 있습니다 man git-config.

다른 답변이 논의하는 "올바른"방법은 대신 kdiff3 또는 vimdiff를 사용하도록 git을 구성 merge.tool하고 다음을 사용하는 것입니다.

git merge --no-commit --no-ff other_branch
git mergetool

...이 명령은 $ BASE, $ LOCAL 및 $ REMOTE 간의 N-way 수동 병합을 $ MERGED로 수행 할 수 있습니다. git 구성 방법에 대한 한 가지 예는 https://stackoverflow.com/a/2235841/1264797참조 하십시오 . mergetool.*.cmdgit이 이미 알고있는 도구 중 하나를 사용하는 경우 항목을 전혀 구성 할 필요가 없습니다 . (Meld는 3 개의 창만 표시 할 수 있으므로 기본 설정으로 meld를 사용하면 $ BASE가 표시되지 않습니다.)

누군가 나를 바로 잡기 위해 뛰어들 수도 있지만 N-way 병합 능력 외에는 두 가지 방법이 동일한 결과를 생성하는 것처럼 보입니다. 둘 다 other_branch를 새 커밋의 부모로 추가 difftool하지도 mergetool않으므로 두 경우 모두 병합은 예를 들어 gitk에서 명확하지 않으며 커밋 메시지에서 설명 (그리고 나중에 주목해야 함)해야합니다.


나는 전략 선택 우리를 당신이 가져-에있는 수동으로 원하는 변경 수동 DIFF을 수행 한 후, (이 TortoiseGit의 선택으로도 존재한다).

출처 : https://git-scm.com/docs/merge-strategies

병합 메커니즘 (git merge 및 git pull 명령)을 사용하면 -s 옵션으로 백엔드 '병합 전략'을 선택할 수 있습니다. 일부 전략은 자체 옵션을 취할 수도 있으며, git merge 및 / 또는 git pull에 -X 인수를 제공하여 전달할 수 있습니다.

우리 것

이것은 수에 관계없이 헤드를 해결하지만 병합의 결과 트리는 항상 현재 분기 헤드의 트리이며 다른 모든 분기의 모든 변경 사항을 효과적으로 무시합니다. 사이드 브랜치의 오래된 개발 역사를 대체하는 데 사용됩니다. 이것은 '재귀 적'병합 전략에 대한 -Xours 옵션과 다릅니다.

그러나 Bitbucket이 나중에 보는 것은 나에게 미스테리입니다. 커밋을 병합으로 인식하지만 실제로 분기를 병합하지 못합니다 (풀 요청을 해결하지 않음). 아마도 Bitbucket 전문가가이 문제에 대해 도움을 줄 수있을 것입니다. 그 가시성이 없기 때문에 로그 / 오류 메시지-git / TortoiseGit은 전혀 불평하지 않습니다.

참고 URL : https://stackoverflow.com/questions/4657009/how-to-merge-all-files-manually-in-git

반응형