문제

나에서 병합 원격지점을 많이 가지고 있의 충돌이 발생합니다.어떻게 알 수 있습니다면 충돌이 있는지?

나는 아무 것도 보이지 않으럼 --dry-rungit-merge.

도움이 되었습니까?

해결책

앞에서 언급했듯이, --no-commit 깃발이지만 빠른 커밋을 피하기 위해 --no-ff, 그렇게 :

$ git merge --no-commit --no-ff $BRANCH

단계별 변경 사항을 검사하려면 :

$ git diff --cached

그리고 합병이 빠르게 병합 된 경우에도 합병을 취소 할 수 있습니다.

$ git merge --abort

다른 팁

저장소와 리모컨 간의 충돌을 자동으로 찾는 메소드를 구현해야했습니다. 이 솔루션은 메모리의 병합을 수행하므로 인덱스 나 작업 트리에 닿지 않습니다. 이 문제를 해결할 수있는 가장 안전한 방법이라고 생각합니다. 작동 방식은 다음과 같습니다.

  1. 리모컨을 저장소로 가져 오십시오. 예를 들어:git fetch origin master
  2. 실행 git merge-base : git merge-base FETCH_HEAD master
  3. 실행 git merge-tree : git merge-tree mergebase master FETCH_HEAD (병합베이스 이전 단계에서 인쇄 된 병합 된 16 진 ID)

이제 원격 마스터를 로컬 마스터와 병합하고 싶지만 모든 지점을 사용할 수 있다고 가정 해 봅시다. git merge-tree 메모리의 병합을 실행하고 결과를 표준 출력에 인쇄합니다. 패턴에 대한 grep << 또는 >>. 또는 출력을 파일에 인쇄하여 확인할 수 있습니다. '둘 다'로 시작하는 선을 찾으면 아마도 갈등이있을 것입니다.

이것에 대한 나의 간단한 무자비한 솔루션은 다음과 같습니다.

  1. "프리 마스터"브랜치 만들기 (물론 마스터에서)

  2. 원하는 모든 것을이 프리 마스터로 병합하십시오.
    그런 다음 마스터를 만지지 않고 어떻게 합병이 일어 났는지 알 수 있습니다.

    • 프리 마스터를 마스터로 병합하십시오
    • 모든 Wannabe가 출시 된 지점을 마스터로 병합하십시오

어쨌든, 나는 @Orange80의 조언을 따를 것입니다.

Git과의 병합을 취소하는 것은 너무 쉽습니다. 드라이 런에 대해 걱정하지 않아야합니다.

$ git pull $REMOTE $BRANCH
# uh oh, that wasn't right
$ git reset --hard ORIG_HEAD
# all is right with the world

편집 : 아래 의견에 언급 된 바와 같이, 작업 디렉토리 또는 스테이징 영역에 변경 사항이 있으면 위의 작업을 수행하기 전에 보관하고 싶을 것입니다 (그렇지 않으면 다음에 따라 사라질 것입니다. git reset 위에)

나는 이것을 수행하기위한 별칭을 만들었고 매력처럼 일한다. 나는 이것을한다.

 git config --global alias.mergetest '!f(){ git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted"; };f '

이제 난 그냥 전화 해요

git mergetest <branchname>

갈등이 있는지 알아 내기 위해.

그 차이는 현재에 대해 지점 원격점,이는 무엇을 말할 것이를 변경하려고 할 때 끌어/합니다.

#see diff between current master and remote branch
git diff master origin/master

나는 그것을 사용한다 요청 -Pull 그렇게하는 Git 명령. 병합 할 때 발생할 모든 변경 사항을 볼 수 있습니다. 그러나 지역 또는 원격 저장소에서 아무것도하지 않고.

예를 들어, "feaction-x"라는 지점을 마스터 브랜치에 병합하고 싶다고 상상해보십시오.

git request-pull master origin feature-x

어떤 일을하지 않고) 어떤 일이 일어날 지에 대한 요약을 보여줄 것입니다.

The following changes since commit fc01dde318:
    Layout updates (2015-06-25 11:00:47 +0200)
are available in the git repository at:
    http://fakeurl.com/myrepo.git/ feature-x
for you to fetch changes up to 841d3b41ad:
----------------------------------------------------------------
john (2):
    Adding some layout
    Refactoring
ioserver.js            |   8 +++---
package.json           |   7 +++++-
server.js              |   4 +--
layout/ldkdsd.js       | 277 +++++++++++++++++++++++++++++++++++++
4 files changed, 289 insertions(+), 7 deletions(-)
create mode 100644 layout/ldkdsd.js

추가하면 -p매개 변수는 또한 모든 변경된 파일에서 git diff를 수행하는 것처럼 전체 패치 텍스트도 얻게됩니다.

아직 패치를 사용하는 것을 제안한 사람이 없다는 것에 놀랐습니다.

합병을 테스트하고 싶다고 가정 해 봅시다 your_branch ~ 안으로 master (나는 당신이 가지고 있다고 가정합니다 master 체크 아웃):

$ git diff master your_branch > your_branch.patch
$ git apply --check your_branch.patch
$ rm your_branch.patch

그것은 트릭을 수행해야합니다.

같은 오류가 발생하면

error: patch failed: test.txt:1
error: test.txt: patch does not apply

즉, 패치가 성공하지 못하고 병합이 충돌을 일으킬 것임을 의미합니다. 출력이 없음 패치가 깨끗하고 분기를 쉽게 병합 할 수 있음을 의미합니다.


이것이 그렇게 될 것입니다 ~ 아니다 실제로 작업 트리를 변경하십시오 (물론 패치 파일을 만드는 것 외에도 안전하게 삭제할 수 있습니다). Git-Apply 문서에서 :

--check
    Instead of applying the patch, see if the patch is applicable to the
    current working tree and/or the index file and detects errors. Turns
    off "apply".

나보다 git에 대해 더 똑똑하거나 경험이 많은 사람에게 주목하십시오. 여기에 내가 틀렸는지 알려주십시오.이 방법은 정기적 인 병합과 다른 행동을 보입니다. 이 질문이 존재했던 8 년 이상 이이 겉보기에 명백한 해결책을 제안하지는 않을 것 같다.

이것은 흥미로울 수 있습니다 : 문서에서 :

합병을 시도하여 복잡한 충돌을 일으켜 다시 시작하고 싶다면 회복 할 수 있습니다. git merge -abort.

그러나 당신은 또한 순진한 (그러나 느리게) 방법을 할 수 있습니다.

rm -Rf /tmp/repository
cp -r repository /tmp/
cd /tmp/repository
git merge ...
...if successful, do the real merge. :)

(참고 : /tmp로 복제하는 것이 아니라 커밋되지 않은 변경이 충돌하지 않도록 사본이 필요합니다).

나는 이것이 오래된 질문이라는 것을 알고 있지만 Google 검색에 가장 먼저 나타납니다.

GIT는 병합 할 때 -ff 전용 옵션을 도입했습니다.

에서: http://git-scm.com/docs/git-merge


--ff 전용

현재 헤드가 이미 최신 상태이거나 합병이 빠르게 해결 될 수없는 한 0이 아닌 상태로 병합 및 종료 거부.

이 작업을 수행하면 합병하고 빠르게 진행 되려고 시도 할 수 없으며, 그렇지 않으면 빠르게 진행할 수 없지만 작업 지점을 손길이 닿지 않게합니다. 빠르게 진행될 수 있다면 작업 지점에서 병합을 수행합니다. 이 옵션도 사용할 수 있습니다 git pull. 따라서 다음을 수행 할 수 있습니다.

git pull --ff-only origin branchA #See if you can pull down and merge branchA

git merge --ff-only branchA branchB #See if you can merge branchA into branchB

Git Log를 사용하여 Master Branch의 기능 분기에서 변경된 사항을 확인합니다.

git log does_this_branch..contain_this_branch_changes

예 : 마스터와 합병되지 않은 기능 지점에 커밋이 무엇인지 확인하기 위해 :

git log master..feature_branch

B에서 A로 빠르게 전달하려면 Git Log B..a가 아무것도 보여주지 않도록해야합니다. 즉, B에는 B가없는 것이 없습니다. 그러나 B..a가 무언가를 가지고 있더라도 갈등없이 합병 할 수 있으므로 위의 내용은 두 가지를 보여줍니다. 빠르게 진행될 것이므로 충돌이 발생하지 않을 것입니다.

작업 사본의 임시 사본을 작성한 다음 이로 통합 한 다음 두 가지를 감소시킵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top