programing

병합 충돌을 해결한 후 병합을 완료하려면 어떻게 해야 합니까?

stoneblock 2023. 5. 14. 10:04

병합 충돌을 해결한 후 병합을 완료하려면 어떻게 해야 합니까?

Git Community Book의 Basic Branching and Merging 섹션을 읽었습니다.

그래서 저는 그것을 따라 하나의 분기를 만듭니다.experimental.

그러면 나는:

  1. 실험 분기로 전환(git checkout 실험)
  2. 많은 변화를 가져오다
  3. 커밋(git commit -a)
  4. 마스터 분기로 전환(git checkout master)
  5. 약간의 변경을 하고 거기에 커밋합니다.
  6. 실험으로 다시 전환(git checkout 실험)
  7. 마스터를 실험 버전으로 병합(git 병합 마스터)
  8. 충돌이 있지만 해결한 후 '내 파일 추가'를 수행했습니다.

  9. 이제 난 꼼짝 못하고 마스터로 돌아갈 수 없어요

내가 할 때는

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

그리고 저는 했습니다:

$ git rebase --abort

진행 중인 기본 재배치는 없습니까?

그리고 저는 했습니다.

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

제가 마스터 지점으로 돌아가려면 어떻게 해야 하나요?

병합 중에 충돌이 발생하면 병합 커밋을 수동으로 완료해야 합니다. 두 는 충돌한 파일을 실행하는.git add해결된 것으로 표시합니다. 여러분은 으로, 실로병커합니와 병합을 해야 .git commit이때 분기를 다시 전환할 수 있습니다.

빠른 팁: 사용할 수 있습니다.git commit -am "your commit message"추적된 파일에 대해 추가 및 커밋 작업을 동시에 수행합니다. (신용: @vaheeds)

병합 충돌을 해결한 후 병합을 완료하려면 어떻게 해야 합니까?

Git 2.12(2017년 1분기)를 사용하면 보다 자연스러운 명령을 사용할 수 있습니다.

git merge --continue

병합을 계속하거나 다시 시작할 때 메시지를 편집하지 않으려면 다음을 수행합니다.

git merge --continue --no-edit

한다면--no-edit작동하지 않습니다. 주석에 보고대로 다음 작업을 수행할 수 있습니다.

# Linux
GIT_EDITOR=true git merge --continue

# Windows
cmd /V /C "set "GIT_EDITOR=true" && git merge --continue"

이러한 명령에 대한 별칭을 정의할 수 있습니다.

mgnobody가 댓글에서 설명한 것처럼 의미:

병합을 실행하고 충돌이 발생하면 다음 작업만 수행하면 됩니다.git add분쟁을 해결한 후에.
git commit나고끝 git add.당신의.git merge --continue그렇게 해줄 겁니다

간단히 말해서,

git merge develop 
# address conflicts 
git add <conflicted files> 
git merge --continue;

제프 peff킹()의 commit c7d227d(2016년 12월 15일)를 참조하십시오.
커밋 042e290, 커밋 cpackhamc261a87, 커밋 367ff69(2016년 12월 14일) 참조.
(주니오 C 하마노에 의해 합병되었습니다 -- -- 커밋 05f6e1b, 2016년 12월 27일)

2.12 릴리스 정보를 참조하십시오.

merge'를 추가합니다.--continue'''의git commit'

git merge그자리의 --continue병합을 완료하여 병합을 '재연결'할 수 있는 옵션입니다.
인 방법은 ' 을해후를병완충전방는인것다법입니통은사는적'를 사용하는입니다.git commit'.
이제 '와 같은 명령을 사용합니다.git rebasediscovery'git cherry-pick다▁a'''가 있는--continue은 ' 션에이러옵추다니합옵가션에 이러한 합니다.git merge일관된 UI를 제공합니다.

병합/리베이스 중에 고착될 경우 언제든지 가능합니다.

git reset --hard

작업을 마지막 커밋 상태로 복원합니다.이렇게 하면 작업 트리의 변경 내용이 손실되므로 병합하기 전에 로컬 수정 내용이 있는 경우 이후에는 변경 내용이 사라집니다. 따라서 로컬 수정 내용이 있는 경우에는 병합을 시작하지 않는 것이 좋습니다.:)

충돌을 수동으로 해결한 다음 단계는 다음과 같습니다.

  1. git add
  2. git 상태(자동 병합 절차를 계속하려면 어떤 명령이 필요한지 표시)
  3. [ git은 다음을 를 들어 [령명 git 안제, 예:git merge --continue,git cherry-pick --continue,git rebase --continue]

그저.git commit그것.

으로 선적으로git abort그것:
병합 충돌이 발생했습니다.병합을 중단하려면 어떻게 해야 합니까?

병합 작업을 보다 쉽게 수행할 수 있도록 kdiff3를 설치하고 병합 도구로 구성합니다.지침: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/

해당 페이지에는 다음 비디오가 포함되어 있습니다. https://www.youtube.com/watch?v=Cc4xPp7Iuzo

을 하여 두 git merge brancha branchb가능성이 : 두가지가있습니다이능성다.

  1. 한 분기(예: brancha)는 커밋 기록을 따라 다른 분기(예: branchbranchb)에 도달할 수 있습니다.이 경우 머리를 최근 분기(이 경우 분기 b)를 가리키도록 빠르게 감기만 하면 됩니다.

    2.그러나 두 분기가 오래된 시점에서 분기된 경우 git는 새 스냅샷을 생성하고 이를 가리키는 새 커밋을 추가합니다.따라서 병합 중인 분기 간에 충돌이 없는 경우 git는 부드럽게 새 커밋을 만듭니다.

려달을 합니다.git log취소되지 않는 두 분기를 병합한 후 커밋을 확인합니다.

이제 병합되는 분기 간에 병합 충돌이 있는 흥미로운 사례로 돌아갑니다.저는 https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging 페이지에서 이것을 참조하십시오.

Git가 자동으로 새 병합 커밋을 만들지 않았습니다.충돌을 해결하는 동안 프로세스가 일시 중지되었습니다.충돌 후 되지 않은 를하면 됩니다.git status


따라서 병합 충돌이 발생하는 경우, 충돌을 해결한 후 다음을 사용하여 변경한 내용을 준비 영역에 추가해야 합니다.git add filename그런 다음 명령을 사용하여 변경 내용을 커밋합니다.git commit충돌 때문에 git에 의해 중단되었습니다.이것이 당신의 질문에 대한 설명이기를 바랍니다.자세한 내용은 위의 링크를 참조하십시오.문의 사항이 있으시면 아래에 댓글을 달아주시면 기꺼이 도와드리겠습니다.

충돌 해결 단계:

  1. 다른 분기(BRANCH_NAME_TO_BE_MERGED)에서 병합할 분기에 대한 첫 번째 '체크아웃'

"git checkout "MAIN_BRANCH"
  1. 그런 다음 다음 명령을 사용하여 "MAIN_BRANCH"와 병합합니다.

"git 병합 오리진/BANCH_NAME_TO_BE_MERGED"


Auto-merging src/file1.py
CONFLICT (content): Merge conflict in src/file1.py
Auto-merging src/services/docker/filexyz.py
Auto-merging src/cache.py
Auto-merging src/props.py
CONFLICT (content): Merge conflict in src/props.py
Auto-merging src/app.py
CONFLICT (content): Merge conflict in src/app.py
Auto-merging file3
CONFLICT (content): Merge conflict in file3
Automatic merge failed; fix conflicts and then commit the result.

이제 "CONPLICT"가 있는 파일에 "CONPLICT(콘텐츠)"가 표시되는 것을 볼 수 있습니다. 코드를 보고 해결하십시오.

  1. git status 실행 => 추가해야 할 파일(해결된 파일)이 표시됩니다.

 Unmerged paths:
      (use "git add <file>..." to mark resolution)

        both modified:   file3
        both modified:   src/app.py
        both modified:   src/props.py
        both modified:   src/utils/file1.py
  1. 모든 충돌을 해결했으면 아래 git 명령을 사용하여 각 파일을 하나씩 추가합니다.

git add file3
git add src/app.py
git add src/props.py
git add src/utils/file1.py
  1. "git commit"(커밋할 때 메시지를 추가합니다. 그렇지 않으면 "esc:q!"를 눌러야 하는 vi 또는 vim 편집기가 열립니다.)
  2. 다시 실행 "git status"

 On branch MAIN_BRANCH
  Your branch is ahead of 'origin/MAIN_BRANCH' by 10 commits.
  (use "git push" to publish your local commits)

7."기트 푸시"

첫 번째로 분명히 하고 싶은 것은 지점 이름이 특정 커밋의 별칭일 뿐이라는 것입니다.커밋은 끌어 당기고 병합을 푸시할 때 git이 작동하는 것입니다.각 커밋에는 고유한 ID가 있습니다.

$git 병합을 수행할 때 실제로 수행되는 작업은 현재 분기를 참조된 분기가 있는 커밋으로 빠르게 전달하려고 시도하는 것입니다(즉, 두 분기 이름이 동일한 커밋을 가리킵니다).이 시나리오는 새로운 커밋이 없기 때문에 가장 쉽게 처리할 수 있습니다.당신의 나뭇가지가 차갑게 식고 있는 릴리패드 위로 뛰어오르는 마스터를 생각해 보세요.--no-off 플래그를 설정할 수 있습니다. 이 경우 git는 코드 충돌 여부에 관계없이 새 커밋을 만듭니다.

병합하려는 두 분기(일반적으로 커밋 기록이 과거에 공통 커밋을 공유하는 두 분기) 간에 코드 충돌이 있는 경우에는 빠른 전달이 작동하지 않습니다. 충돌하는 파일의 두 분기에서 동일한 행이 변경되지 않은 한 계속해서 파일을 자동으로 병합할 수 있습니다.이 경우 Git는 충돌하는 파일을 병합하여 자동으로 커밋합니다.$git diff --cached를 수행하여 git이 어떻게 수행되었는지 미리 볼 수 있습니다.또는 --no-commit 플래그를 병합 명령에 전달하여 추가 및 커밋해야 하는 수정된 파일을 인덱스에 남겨둘 수 있습니다.그러나 병합이 변경할 내용을 검토하기 위해 이 파일들을 $gdiff할 수 있습니다.

세 번째 시나리오는 git가 자동으로 해결할 수 없는 충돌이 있는 경우입니다.이 경우 수동으로 병합해야 합니다.내 생각에 이것은 Araxis merge 또는 p4 merge(무료)와 같이 병합을 통해 수행하는 것이 가장 쉽습니다.어느 쪽이든, 당신은 각각의 파일을 하나씩 해야 합니다.병합이 고착된 것 같으면 $git merge --continue를 사용하여 계속 진행합니다.Git는 그것이 계속될 수 없다면, 그리고 만약 그렇다면 왜 그렇지 않은지 당신에게 말해야 합니다.어떤 시점에서 병합을 사용했다고 생각되면 $git merge --abort를 수행할 수 있습니다. 그러면 병합이 실행 취소되고 다시 시작할 수 있습니다.작업이 완료되면 병합한 각 파일이 추가 및 커밋해야 하는 수정된 파일이 됩니다.$git 상태의 파일 위치를 확인할 수 있습니다.병합된 파일을 아직 커밋하지 않은 경우.병합을 완료하려면 이 작업이 필요합니다.분기를 전환하려면 먼저 병합을 완료하거나 병합을 중단해야 합니다.

병합 충돌은 병합하려는 두 분기가 모두 동일한 파일의 동일한 부분을 변경한 경우에 발생합니다. 목을생수있다니습성으로 충돌 목록을 할 수 .git status.

충돌하는 행이 발견되면 Git는 충돌하는 내용의 양쪽을 표시하는 시각적 표시기를 사용하여 영향을 받는 파일의 내용을 편집합니다.

<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch

병합할 충된파일수병고준합비되가됩하다니실면만돌을 실행하기만 .git add그리고.git commit병합 커밋을 생성합니다., 단약속이지면일어루이,면,git push지점의 변경 사항

참조 기사:Git merge.

모든 파일이 추가된 후 다음 단계는 "git commit"입니다.

"git status"는 추가할 파일이 아래에 나열되고, 추가할 파일이 모두 완료되면 위쪽에 커밋을 제안하여 현재 분기의 병합 상태를 설명합니다.

늦을지도 몰라요.Git HEAD가 업데이트되지 않아서 발생한 일입니다.이 추천은 그것을 해결할 것입니다.git reset HEAD.

또 다른 옵션은, 저는 비축을 시도했고 저를 위해 아무런 약속 없이 잘 일했습니다.

모든 충돌을 해결한 후에는

-> git stash

-> gitstash 적용 stash@{0}

잘 작동했습니다. 이후에도 다른 지점으로 전환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/2474097/how-do-i-finish-the-merge-after-resolving-my-merge-conflicts