특정 파일("우리", "내", "그들의")에 대한 Git 병합 전략을 선택합니다.
잠시 후에 리베이스를 하는 중입니다.git pull --rebase
병합 충돌이 있는 파일이 몇 개 있습니다.특정 파일에 대한 "그들" 변경사항 또는 "내" 변경사항을 수락하려면 어떻게 해야 합니까?
$ git status
# Not currently on any branch.
# You are currently rebasing.
# (fix conflicts and then run "git rebase --continue")
# (use "git rebase --skip" to skip this patch)
# (use "git rebase --abort" to check out the original branch)
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: CorrectlyMergedFile
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add <file>..." to mark resolution)
#
# both modified: FileWhereIWantToAcceptTheirChanges
# both modified: FileWhereIWantToAcceptMyChanges
일반적으로 저는 파일이나 병합 도구를 열고 모든 "그들" 또는 "내" 변경사항을 수동으로 수락합니다.하지만 편리한 git 명령어가 누락된 것 같습니다.
또한 충돌이 발생한 파일과 충돌이 발생한 경우에만 각 파일에 대한 병합 전략을 선택할 수 있습니다.
충돌하는 각 파일에 대해 다음을 지정할 수 있습니다.
git checkout --ours -- <paths>
# or
git checkout --theirs -- <paths>
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
--ours
--theirs
때 stage 2stage #2)ours
) 또는 #3(theirs
병합되지 않은 경로의 경우.이전에 병합에 실패했기 때문에 인덱스에 병합되지 않은 항목이 포함되어 있을 수 있습니다.기본적으로 인덱스에서 이러한 항목을 체크아웃하려고 하면 체크아웃 작업이 실패하고 아무것도 체크아웃되지 않습니다.용사를 합니다.
-f
병합되지 않은 항목은 무시됩니다.은 다음을사여병특측정 내 인 있 수 에 체 서 니 다 습 할 웃 아 크 스 덱 을 용 용 하 의 합 ▁by ▁using 니 ▁the 다 ▁index ▁be 있 습 ▁can ▁out ▁of ▁the ▁side ▁of ▁contents ▁from ▁checked ▁specific ▁merge--ours
또는--theirs
.와 함께-m
작업 트리 파일의 변경 내용을 삭제하여 원래의 충돌된 병합 결과를 다시 만들 수 있습니다.
이 질문에 답하더라도 깃베이스 대 병합의 경우 "그들의 것"과 "우리의 것"이 무엇을 의미하는지에 대한 예를 제공합니다.이 링크 보기
theirs
rebase의 경우에는 실제로 현재 분기입니다.따라서 아래 명령 집합은 실제로 원격 분기를 통해 현재 분기 변경사항을 수락합니다.
# see current branch
$ git branch
...
* branch-a
# rebase preferring current branch changes during conflicts
$ git rebase -X theirs branch-b
Merge
병합의 경우, 다음과 같습니다.theirs
그리고.ours
반대입니다.따라서 병합 중에도 동일한 효과를 얻으려면, 즉 현재 분기 변경 사항을 유지합니다.ours
에 있습니다. (으(으)로 표시됩니다.theirs
).
# assuming branch-a is our current version
$ git merge -X ours branch-b # <- ours: branch-a, theirs: branch-b
:git checkout --ours|--theirs
다음 중 하나를 선택하여 파일을 완전히 덮어씁니다.theirs
또는ours
원하는 버전일 수도 있고 아닐 수도 있습니다(다른 쪽에서 수정되지 않은 변경사항이 있는 경우 해당 변경사항은 손실됩니다).
대신 파일에 대해 3방향 병합을 수행하고 다음을 사용하여 충돌된 헝크만 해결하려면--ours|--theirs
양쪽의 비굴한 허크를 제자리에 유지하면서, 당신은 아마도 의지하고 싶을 것입니다.git merge-file
자세한 내용은 이 답변을 참조하십시오.
위의 의견에서 @user456814를 인용합니다.
git rebase -s recursive -X <ours/theirs>
또는
git merge -s recursive -X <ours/theirs>
기본 재배치의 경우 "우리"와 "그들"은 병합 중에 원래 상태와 반대됩니다.
@user456814는 2014년에 승인된 답변에 대한 코멘트에서 이 유용한 답변을 했습니다.그런 면에서 댓글이 제한되어 있기 때문에 쉽게 찾고, 평가하고, 업데이트하는 등의 작업을 하기 위해 커뮤니티 위키로 표면화하고 있습니다.
언급URL : https://stackoverflow.com/questions/16825849/choose-git-merge-strategy-for-specific-files-ours-mine-theirs
'programing' 카테고리의 다른 글
NULL 값을 테이블 끝으로 정렬 (0) | 2023.05.01 |
---|---|
VBA에서 단어를 비교할 때 대소문자 민감도를 제거합니까? (0) | 2023.05.01 |
단일 SQL Server 문이 원자적이고 일관성이 있습니까? (0) | 2023.04.26 |
INFORMATION_SCHEMA를 사용하여 기본 제약 조건을 찾으려면 어떻게 해야 합니까? (0) | 2023.04.26 |
Azure 가상 시스템이 웹 사이트를 지원하도록 할 수 없습니다. (0) | 2023.04.26 |