"git merge -s ours"의 "그들"버전이 있습니까?


876

을 사용하여 주제 분기 "B"를 "A"로 병합하면 git merge충돌이 발생합니다. "B"버전을 사용하여 모든 충돌을 해결할 수 있다는 것을 알고 있습니다.

알고 git merge -s ours있습니다. 그러나 내가 원하는 것은와 같습니다 git merge -s theirs.

왜 존재하지 않습니까? 기존 git명령 과의 병합 충돌 후에 어떻게 동일한 결과를 얻을 수 있습니까? ( git checkoutB에서 병합되지 않은 모든 파일)

업데이트 : 지점 A (병합 커밋 지점 B의 트리 버전)에서 아무것도 버리는 "솔루션"은 내가 찾고있는 것이 아닙니다.


1
또한이 답변을 참조하십시오 : stackoverflow.com/questions/928646/…-A 대신 버전 B를 사용하도록 예제를 변경하는 것은 쉽지 않습니다.
Robie Basak

8
시뮬레이션 할 수있는 모든 가능한 방법에 대해서는 한 분기를 다른 분기로 만들기위한 SO answer git 명령을 참조하십시오 . git merge -s their
VonC

4
그래서 당신은 git merge -s theirs( git merge -s ours임시 브랜치로 쉽게 달성 할 수있는)를 찾고 있지 않습니다 . 왜냐하면 -s는 머지
오프

21
@Torek는 - 힘내는 DEVS 않는 정말 찾을 것을 공세가 제공하는 theirs이외에 ours??? 이것은 Git의 높은 수준의 엔지니어링 및 디자인 문제 중 하나 인 불일치의 증상입니다.
jww

3
@jww 여기서 문제는 "git merge -s ours"가 공격적이지 않고 반 직관적이지 않다는 것입니다. OP의 질문에서 그러한 기능을 추가하면 실제로 원하는 기능이 "git merge -s recursive -X theirs"인 경우 실수로 사용한다는 것을 알 수 있습니다. 다른 브랜치가 다른 브랜치의 버전과 충돌을 재정의하는 다른 브랜치를 병합하는 것이 일반적이지만 현재 브랜치를 다른 브랜치로 완전히 덮어 쓰는 것은 현재의 변경 사항을 완전히 버리는 것이 실제로 예외입니다.
ThomazMoura

답변:


1019

-X옵션을 추가하십시오 theirs. 예를 들면 다음과 같습니다.

git checkout branchA
git merge -X theirs branchB

모든 것이 원하는 방식으로 병합됩니다.

내가 본 유일한 문제는 파일이 branchB에서 삭제 된 경우입니다. git 이외의 것이 제거를 수행하면 충돌로 나타납니다.

수정이 쉽습니다. git rm삭제 된 파일 이름으로 실행 하십시오.

git rm {DELETED-FILE-NAME}

그 후, -X theirs예상대로 작동합니다.

물론, git rm명령 을 사용하여 실제 제거를 수행 하면 처음부터 충돌이 발생하지 않습니다.


참고 : 더 긴 양식 옵션도 있습니다.

사용하려면 다음을 교체하십시오.

-X theirs

와:

--strategy-option=theirs

6
원래 질문에 대한 더 나은 해결책 (Paul Pladijs)에 대해서는 아래의 다른 답변을 참조하십시오.
Malcolm

204
이것은 "병합 전략 theirs" 과 동일하지 않습니다 . -Xtheirs는 재귀 전략에 적용되는 전략 옵션 입니다. 이는 재귀 전략이 여전히 가능한 모든 것을 병합하고 충돌시 "그들의"논리로만 넘어 간다는 것을 의미합니다. 이것이 위와 같은 대부분의 경우에 필요한 것이지만, "지점 B에서 모든 것을 그대로 가져가는 것"과 같지는 않습니다. 어쨌든 실제 병합을 수행합니다.
Timur

2
다른 명령과도 작동합니다. 방금 'git cherry-pick sha1 -X their'를했습니다. 감사!
Max Hohenegger

48
이것은 옳은 것처럼 보이지만 실제로 잘못 되었기 때문에 끔찍한 대답입니다. "git merge -X theirs" "git merge -s theirs"의 기능을 수행하지 않습니다. 현재 분기를 병합 된 분기의 컨텐츠로 바꾸지 않습니다. "그들의"변경을 선호하지만 충돌이있는 경우에만 선호합니다. 따라서 결과 커밋은 "그들의"분기와 상당히 다를 수 있습니다. 이것은 질문 포스터가 생각한 것이 아닙니다.
Ivan Krivyakov 1

7
@ user3338098 : 그렇습니다. 나는 그 질문을 다시 읽고, 그것은 또한 좋지 않다. 불행히도 혼란의 근본 원인은 답이 아니며 질문조차 아닙니다. 병합 전략과 병합 전략 '재귀 적'옵션에 동일한 이름을 '우리'로 지정하는 것은 git 작성자의 디자인 선택입니다. 이 경우 혼란은 사실상 불가피하다.
Ivan Krivyakov

218

지점 B를 체크 아웃 한 지점 A에 병합하기위한 가능한 테스트 된 솔루션 :

# in case branchA is not our current branch
git checkout branchA

# make merge commit but without conflicts!!
# the contents of 'ours' will be discarded later
git merge -s ours branchB    

# make temporary branch to merged commit
git branch branchTEMP         

# get contents of working tree and index to the one of branchB
git reset --hard branchB

# reset to our merged commit but 
# keep contents of working tree and index
git reset --soft branchTEMP

# change the contents of the merged commit
# with the contents of branchB
git commit --amend

# get rid off our temporary branch
git branch -D branchTEMP

# verify that the merge commit contains only contents of branchB
git diff HEAD branchB

이를 자동화하기 위해 branchA 및 branchB를 인수로 사용하여 스크립트로 랩핑 할 수 있습니다.

이 솔루션은 예상 한대로 병합 커밋의 첫 번째와 두 번째 부모를 유지합니다 git merge -s theirs branchB.


Q : 왜 분기 TEMP가 필요합니까? 당신은 단지 수 없습니다 git reset --soft branchA?
cdunn2001

4
@ cdunn2001 : 어떻게 든 같은 것을 생각했지만 아닙니다. git reset --hard커밋이 branchA가리키는 변경 사항에 유의하십시오 .
이토 쓰요시

5
바보 같은 질문을해서 미안하지만 왜이 방법이 -xtheirs보다 낫습니까? 장점 / 단점은 무엇입니까
chrispepper1989

9
@ chrispepper1989 -x 그들의 충돌충돌 에만 영향을 미칩니다. 우리 덩어리를 깨끗하게 적용 할 수 있다면 병합 결과를 얻습니다. 이 경우 마지막 명령에서 볼 수 있듯이 충돌이 있었는지 여부에 관계없이 branchB와 완전히 동일한 병합을 얻습니다 .
UncleZeiv

2
@UncleZeiv는 설명을 주셔서 감사합니다. 기본적으로 "그들의 것"을 수행하면 충돌하지 않는 변경 사항과 파일이 유지되어 풀링 된 코드와 동일하지 않은 코드가 생성됩니다.
chrispepper1989

89

이전 버전의 git에서는 "그들의"병합 전략을 사용할 수있었습니다.

git pull --strategy=theirs remote_branch

그러나 Junio ​​Hamano (Git 관리자) 가이 메시지에서 설명한 대로이 기능 은 삭제되었습니다 . 링크에서 언급했듯이 대신 다음을 수행하십시오.

git fetch origin
git reset --hard origin

그러나 이것은 실제 병합과는 다릅니다. 귀하의 솔루션은 아마도 당신이 정말로 찾고있는 옵션 일 것입니다.


7
Junio ​​Hamano의 설명을 전혀 이해하지 못합니다. git reset --hard origin스타일 병합 솔루션 은 어떻게 되나요? Alan B. Smith의 답변과 같이 BranchB를 BranchA에 병합하려면 reset방법을 사용하여 어떻게해야 합니까?
James McMahon

3
@ 제임스 맥 마혼 (James McMahon) : Junio ​​C Hamano의 요점은 git reset --hard“그들의”스타일 합병 이 아닙니다 . 물론, git reset --hard병합 커밋이나 그 문제에 대한 커밋을 만들지 않습니다. 그의 요점은 HEAD의 어떤 것을 다른 것으로 대체하기 위해 병합사용해서는 안된다는 것입니다. 그러나 반드시 동의하지는 않습니다.
이토 쓰요시

11
theirs근거가 불완전하여 제거 된 것은 부끄러운 일입니다 . 코드가 좋은 인스턴스를 허용하지 못했습니다. 업스트림이 다른 철학적 기반으로 유지된다는 의미이므로 '나쁜'것이므로 업스트림을 최신 상태로 유지하려고하지만 동시에 좋은 코드 '수정'을 유지하십시오 [git & msysgit는 서로 다른 대상 플랫폼의 철학
Philip Oakley

1
또한 다른 사람과 지점을 공유하고 현재 다른 파일에서 변경 사항을 동시에 푸시하는 유스 케이스가 누락되었습니다. 그래서 로컬에있는 모든 이전 버전을 클로버하고 대신 최신 버전을 사용하고 싶습니다. 그는 내가 업데이트 한 파일에 대해 동일한 작업을 수행하려고합니다. '재설정'할 것이 없습니다. 그리고 개별 파일 을 체크 아웃하는 솔루션 은 ~ 20 파일 일 때 실용적이지 않습니다.
szeitlin

2
나는 철학을 정말로 이해하지 못한다. 방금 theirs실수로 두 개의 개별 분기에서 일부 파일을 변경하고 모든 파일에 대해 수동으로 수행하지 않고 하나의 변경 사항을 삭제하려고했기 때문에 방금 사용 했습니다.
sudo

65

원하는 결과가 무엇인지 명확하게 알 수 없으므로 답변과 의견에 "올바른"방법을 사용하는 것에 대해 약간의 혼란이 있습니다. 개요를 제공하려고 시도하고 다음 세 가지 옵션을 봅니다.

병합을 시도하고 충돌에 B를 사용하십시오.

입니다 하지 은 "에 대한 그들의 버전 git merge -s ours"하지만 "에 대한 그들의 버전 git merge -X ours(대한 짧은" git merge -s recursive -X ours) :

git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB

예를 들어 Alan W. Smith의 답변 이 이에 해당합니다.

B의 컨텐츠 만 사용

이렇게하면 두 분기 모두에 대해 병합 커밋이 만들어 지지만의 모든 변경 사항은 버리고 branchA내용 만 유지됩니다 branchB.

# Get the content you want to keep.
# If you want to keep branchB at the current commit, you can add --detached,
# else it will be advanced to the merge commit in the next step.
git checkout branchB

# Do the merge an keep current (our) content from branchB we just checked out.
git merge -s ours branchA

# Set branchA to current commit and check it out.
git checkout -B branchA

이제 첫 번째 상위 커밋 커밋은 from branchB이고 두 번째 만 from branchA입니다. 이것이 예를 들어 간달프 458의 답변 입니다.

B의 콘텐츠 만 사용하고 올바른 부모 순서를 유지하십시오.

이것은 "의 실제 버전 git merge -s ours"입니다. 이 같은 전에 옵션 등의 내용 (즉,에서, 즉에만있다 branchB)하지만를 부모의 순서가 올바른, 즉 최초의 부모로부터 온다 branchA과에서 두 번째 branchB.

git checkout branchA

# Do a merge commit. The content of this commit does not matter,
# so use a strategy that never fails.
# Note: This advances branchA.
git merge -s ours branchB

# Change working tree and index to desired content.
# --detach ensures branchB will not move when doing the reset in the next step.
git checkout --detach branchB

# Move HEAD to branchA without changing contents of working tree and index.
git reset --soft branchA

# 'attach' HEAD to branchA.
# This ensures branchA will move when doing 'commit --amend'.
git checkout branchA

# Change content of merge commit to current index (i.e. content of branchB).
git commit --amend -C HEAD

이것이 Paul Pladijs의 답변입니다 (임시 지점 필요 없음).


옵션 3의 깔끔한 버전 :git checkout branchA; git merge -s ours --no-commit branchB; git read-tree -um @ branchB; git commit
jthill

@jthill : 버전이 더 간결하지만 read-tree평균 git 사용자가 익숙하지 않은 하위 수준 ( "배관") 명령 을 사용합니다 (적어도;-는 아닙니다). 답변의 솔루션은 대부분의 git 사용자가 알아야하는 고급 ( "도자기") 명령 만 사용합니다. 나는 그들을 선호하지만 그럼에도 불구하고 귀하의 버전에 감사드립니다!
siegi

두 번째 단계에서 마지막 단계 (체크 아웃 지점 A)를 설명 할 수 있습니까? 거기 있으면 안되는 것 같습니다.
Patrick

@ 패트릭,이 단계는 필수입니다. 건너 뛰면 동일한 커밋을 얻지 만이 커밋을 가리키는 분기가 없습니다. 따라서 다른 커밋 / 분기로 전환하자마자 마지막 명령 ( …commit --amend…) 으로 수행 한 커밋이 "손실"됩니다. 시간을 내
자마자이

62

지금부터 Paul Pladijs의 답변을 사용했습니다. "정상"병합을 수행 할 수 있으며 충돌이 발생하므로

git checkout --theirs <file>

다른 지점의 개정판을 사용하여 충돌을 해결합니다. 각 파일에 대해이 작업을 수행하면 예상 한 것과 동일한 동작이 나타납니다.

git merge <branch> -s theirs

어쨌든 노력은 합병 전략보다 더 중요합니다! (이것은 자식 버전 1.8.0에서 테스트되었습니다)


1
파일 목록을 검색 할 수 있다면 좋을 것입니다. 예를 들어, git ls-files --modified | xargs git add내가 병합 양쪽에 추가 된이 작업을 수행하고 싶었 : /
andho

실제로 git은 양쪽 파일에 추가 된 것을 반환 git ls-files --modified하므로 이것이 가능한 해결책이라고 생각합니다.
andho

1
이것을 추가해 주셔서 감사합니다. 더 자주 파일별로 필요하지 않습니다. 또한 git status는 맨 아래에 "Unmerged Paths"를 표시합니다. 해결되지 않은 경로 목록을 얻으려면이 별칭을 사용합니다.git config --global alias.unresolved '!git status --short|egrep "^([DAU])\1"'
Melvyn

의 의미는 무엇 -X과의 차이 무엇 -X-s? 문서를 찾을 수 없습니다.
레이 양

21

나는 내 문제를 해결했다.

git checkout -m old
git checkout -b new B
git merge -s ours old

"old"지점에서 "B"지점
elmarco

13

git merge를 사용하여 "A"의 주제 분기 "B"를 병합하면 충돌이 발생합니다. "B"버전을 사용하여 모든 충돌을 해결할 수 있음을 알고 있습니다.

git merge -s 우리를 알고 있습니다. 그러나 내가 원하는 것은 git merge> -s와 같은 것입니다.

마스터에서 브랜치를 생성하고 마스터로 다시 병합하여 마스터의 이전 항목을 재정의하려고한다고 가정합니다. 그것이 내가이 포스트를 만났을 때하고 싶었던 바로 그 것입니다.

한 지점을 다른 지점으로 먼저 병합하는 것을 제외하고는 원하는 작업을 정확하게 수행하십시오. 방금이 작업을 수행했으며 훌륭하게 작동했습니다.

git checkout Branch
git merge master -s ours

그런 다음 마스터를 체크 아웃하고 분기를 병합하십시오 (지금 원활하게 진행됨).

git checkout master
git merge Branch

1
감사. 이것은 가장 단순하고 가장 정확한 대답이어야합니다. 지점이 마스터와 뒤떨어 지거나 충돌하는 경우 모든 지점을 병합하기 전에 지점 작업을 병합하고 모든 작업을 수행해야합니다.
StackHola

이것은 훌륭했습니다, 감사합니다.
Kodie Grantham

12

지점 A에 있다면 :

git merge -s recursive -X theirs B

자식 버전 1.7.8에서 테스트


8

병합 하려는 브랜치의 입력 가져 오는 병합을 실제로 올바르게 수행하려면 할 수 있습니다

git merge --strategy=ours ref-to-be-merged

git diff --binary ref-to-be-merged | git apply --reverse --index

git commit --amend

내가 아는 시나리오에는 충돌이 없으며 추가 분기를 만들 필요가 없으며 일반적인 병합 커밋처럼 작동합니다.

그러나 이것은 서브 모듈과 잘 어울리지 않습니다.


-R은 여기서 무엇을합니까?
P. Myer Nore

이렇게하면 "이동 및 변경된"파일의 기록이 손실됩니다. 내가 맞아?
elysch

1
-R은-역으로, 더 많은 자체 문서화를 위해 답변을 업데이트했습니다.
Elijah Lynn

병합하려는 파일이 들어오는 분기에서 삭제 된 경우 작동하지 않는 것 같습니다.
solvingJ

7

왜 존재하지 않습니까?

" 하나의 브랜치를 다른 브랜치처럼 만들기위한 git 명령 "에서 시뮬레이트하는 방법에 대해 git merge -s theirs언급했지만 Git 2.15 (2017 년 4 분기)가 더 명확 해졌습니다.

-X<option>병합을 위한 ' '에 대한 문서 가 잘못되어 " -s theirs"이 (가) 존재하지 않는다고 제안되었습니다 .

참조 c25d98b 커밋 에 의해 (2017 9월 25일)를 Junio C 하마노 ( gitster) .
( Junio ​​C gitsterHamano 에 의해 병합 - 커밋 4da3e23 , 2017 년 9 월 28 일)

병합 전략 : "-s theirs "가

-Xours병합 옵션에 대한 설명 에는 괄호 안에 메모와는 매우 다르며 -s ours, 그에 대한 설명은 정확하지만, 그에 대한 설명은 -Xtheirs부주의하게 "이것과 반대입니다 ours" 라고 말하면서 독자도 필요하다는 잘못된 인상을줍니다. -s theirs실제로 존재하지 않는 와는 매우 다르다는 경고를 받습니다.

-XtheirsA는 전략 옵션 재귀 전략에 적용했다. 이는 재귀 전략이 여전히 가능한 모든 것을 병합하고 theirs충돌시 " "논리 로만 넘어 간다는 것을 의미합니다 .

theirs병합 전략 의 적절성에 대한 논쟁은 최근 2017 년 9 월 스레드에서 다시 제기 되었습니다 . 오래된 (2008) 스레드를
인식 합니다.

간단히 말해서, 앞에서 논의한 내용은 " -s theirs잘못된 워크 플로를 장려하기 때문에 ' ' 원하지 않습니다 '라고 요약 할 수 있습니다 .

별명을 언급합니다.

mtheirs = !sh -c 'git merge -s ours --no-commit $1 && git read-tree -m -u $1' -

야로슬라프 할 첸코 (Yaroslav Halchenko)는이 전략을 다시 한 번지지하려고 하지만 Junio ​​C. Hamano는 다음과 같이 덧붙입니다 .

우리와 그들의 것이 대칭이 아닌 이유는 당신이 아니고 당신이 아니기 때문입니다 .-- 우리의 역사와 역사의 통제와 소유권은 대칭이 아닙니다.

히스토리가 메인 라인이라고 결정한 후에는 개발 라인을 사이드 브랜치로 취급하고 해당 방향으로 병합하려고합니다. 부모는 당신의 역사에서 마지막으로 나쁜 사람입니다. 그래서 당신은 "checkout their-history && merge -s ours your-history "를 하면 첫 번째 부모를 현명하게 유지할 수 있습니다.

그리고 그 시점에서 " -s ours"의 사용은 더 이상 " "이 없어도 해결 방법이 아닙니다 -s theirs.
그것은 원하는 의미론의 적절한 부분입니다. 즉, 살아남은 정식 히스토리 라인의 관점에서, 당신은 그것이 행한 것을 보존하고, 다른 히스토리 라인이 한 것을 무효로하고 싶습니다 .

Junio는 Mike Beaton이 다음 과 같이 덧붙입니다 .

git merge -s ours <their-ref>효과적으로는 ' <their-ref>지속적으로 무시되는 커밋으로 지점에서 이루어진 마크 커밋'이라고 말합니다 .
나중에 분기의 상태에서 병합하는 경우 무시 된 변경 사항이 적용되지 않고 이후 변경 사항이 적용되므로 중요 합니다.


1
이것은 유용한 답변이지만, 난 그냥 Junio C. 하마노의 대답은 이해 한 것을 하나의 키 포인트 언급하지 않습니다 git merge -s ours <their-ref>효율적으로 말한다 '<자신의-REF>가 그 지점에 커밋 영구적으로 무시하기로 만들어 마크 커밋 '; 나중에 문제가되는 지점의 상태에서 병합하면 무시 된 변경 사항을 적용하지 않고 나중에 변경 내용을 가져올 수 있기 때문입니다.
MikeBeaton

1
@MikeBeaton 감사합니다. 더 많은 가시성을 제공하기 위해 귀하의 의견을 답변에 포함 시켰습니다.
VonC

5

참조 후니 오 하마노의 널리 인용 답변 . 커밋 된 컨텐츠를 버릴 경우 커밋을 버리거나 어떤 식 으로든 주요 히스토리에서 제외하십시오. 앞으로 읽을 모든 사람들이 제공 할 것이없는 커밋 메시지를 커밋하는 이유는 무엇입니까?

그러나 때로는 관리 요구 사항이나 다른 이유가있을 수 있습니다. 아무것도 기여하지 않는 커밋을 실제로 기록 해야하는 상황에서는 다음을 원합니다.

(편집 : 와우, 전에이 문제를 잘못 처리 했습니까?이 것이 효과가 있습니다.)

git update-ref HEAD $(
        git commit-tree -m 'completely superseding with branchB content' \
                        -p HEAD -p branchB    branchB:
)
git reset --hard

3

이것은 git plumbing 명령 read-tree를 사용하지만 전반적인 워크 플로우를 단축시킵니다.

git checkout <base-branch>

git merge --no-commit -s ours <their-branch>
git read-tree -u --reset <their-branch>
git commit

# Check your work!
git diff <their-branch>

0

기존 baseBranch에 newBranch를 병합합니다

git checkout <baseBranch> // this will checkout baseBranch
git merge -s ours <newBranch> // this will simple merge newBranch in baseBranch
git rm -rf . // this will remove all non references files from baseBranch (deleted in newBranch)
git checkout newBranch -- . //this will replace all conflicted files in baseBranch

git commit --amend예제 끝에 추가 하거나 사용자에게 병합 커밋이 표시 git log되고 작업이 완료되었다고 가정 할 수 있습니다.
Michael R

0

실제로 원하는 것은 다음과 같습니다.

git checkout -B mergeBranch branchB
git merge -s ours branchA
git checkout branchA
git merge mergeBranch
git branch -D mergeBranch

이것은 서투른 것처럼 보이지만 작동해야합니다. 내가이 솔루션에 대해 정말로 싫어하는 유일한 생각은 git history가 혼란 스러울 것입니다 ...하지만 최소한 역사는 완전히 보존되므로 삭제 된 파일에 대해 특별한 작업을 수행 할 필요가 없습니다.


0

'git merge -s theirs branchB'에 해당하는 항목 (부모 순서 유지)

병합하기 전에 :여기에 이미지 설명을 입력하십시오

!!! 깨끗한 상태인지 확인하십시오 !!!

병합을 수행하십시오.

git commit-tree -m "take theirs" -p HEAD -p branchB 'branchB^{tree}'
git reset --hard 36daf519952 # is the output of the prev command

우리는 무엇을 했습니까? 우리는 두 부모와 우리와 그들의 커밋이 branchB 인 새로운 커밋을 만들었습니다.

병합 후 :여기에 이미지 설명을 입력하십시오

더 정확하게:

git commit-tree -m "take theirs" -p HEAD -p 'SOURCE^{commit}' 'SOURCE^{tree}'

0

이 답변은 Paul Pladijs가 제공했습니다. 방금 그의 명령을 취하고 편의를 위해 자식 별칭을 만들었습니다.

.gitconfig를 편집하고 다음을 추가하십시오.

[alias]
    mergetheirs = "!git merge -s ours \"$1\" && git branch temp_THEIRS && git reset --hard \"$1\" && git reset --soft temp_THEIRS && git commit --amend && git branch -D temp_THEIRS"

그런 다음 다음을 실행하여 "git merge -s theirs A"를 실행할 수 있습니다.

git checkout B (optional, just making sure we're on branch B)
git mergetheirs A

-1

나는 최근에 공통의 역사를 공유하는 두 개의 별도 저장소에 대해이 작업을 수행해야했습니다. 나는 시작했다 :

  • Org/repository1 master
  • Org/repository2 master

모든 변경 사항 repository2 master이에 적용 되기를 원했고 repository1 master, repository2가 수행 한 모든 변경 사항을 승인했습니다. git의 관점에서 볼 때 이것은 존재하지 않는 전략 이어야-s theirs 합니다. 때문에 조심 -X theirs당신이 원하는 것이 그것 같이 이름 만이 NOT 같은 (심지어 사람의 페이지에서 이렇게 말한다).

내가 이것을 해결 한 방법은 가서 repository2새로운 지사를 만드는 것이었다 repo1-merge. 그 지점에서 나는 달렸고 git pull git@gitlab.com:Org/repository1 -s ours아무런 문제없이 잘 병합되었습니다. 그런 다음 리모컨으로 밀어 넣습니다.

그런 다음 돌아가서 repository1새 지점을 repo2-merge만듭니다. 해당 지점에서 git pull git@gitlab.com:Org/repository2 repo1-merge문제가 완료됩니다.

마지막으로, 병합 요청을 발행 repository1하여 새 마스터로 만들거나 분기로 유지해야합니다.


-2

간단하고 직관적 인 (제 생각에는) 2 단계 방법입니다.

git checkout branchB .
git commit -m "Picked up the content from branchB"

뒤에

git merge -s ours branchB

(두 지점이 병합 된 것으로 표시)

유일한 단점은 현재 브랜치에서 branchB에서 삭제 된 파일을 제거하지 않는다는 것입니다. 그런 다음 두 가지 사이의 간단한 차이점은 그러한 파일이 있는지 보여줍니다.

이 접근 방식은 이후에 수행 된 작업과 수행 된 작업을 개정 로그에서 명확하게합니다.


이것은 원래 질문에 대해서는 맞을 수 있지만, OP는 2008 년에이 답변이 잘못된 방식으로 질문을 업데이트했습니다.
user3338098

1
@ user3338098 네,이 오해의 소지가 제목을 떠나 단지에서 그렇게 보이지 않는 업데이트를 때렸다 것과 같은 연민의 이 답이 있기 때문에 .... 질문 본체를 수행 올바르게 제목의 질문에 대답합니다.
RomainValeri

@RomainValeri
AppleCiderGuy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.