Git은 내 파일에서 왼쪽 HEAD 표시를 병합합니다.


101

Git을 사용하여 명령 줄에서 파일을 병합하려고했는데 병합이 중단되었다는 오류 메시지가 나타납니다.

그게 끝이라고 생각했지만 내 파일에 gitmark가 있다는 것을 깨달았습니다. 이렇게 :

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+\-=@#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

파일은 내가 편집하지 않았으며 다음과 같이 삽입 된 줄을 표시합니다.

  • 미만 기호 ( <<<<<<< HEAD) 뒤의 HEAD
  • 변경된 코드 줄
  • 등호 문자열 ( =======)
  • 새 버전의 코드
  • 보다 큼 기호와 분기 이름 ( >>>>>>> gh-pages)으로 시작하는 다른 줄

더 나쁜 것은 파일 내용이 더 이상 순서가 없다는 것입니다. 누구든지 파일을 정상으로 되 돌리는 방법과 gh-branch에서 변경 한 내용이 master 브랜치에 병합되는 방법을 알고 있습니까?

답변:


96

그것들은 갈등 마커 입니다. 여전히 병합하는 중이지만 Git이 자동으로 병합 할 수없는 부분이있었습니다. 당신은 것입니다 손으로 편집에 그 부분이 필요 당신이 그들이 원하는 무엇을하고 결과를 커밋합니다.


예를 들어, 특정 경우에 다음과 같이 해결하고 싶을 것입니다 (참고-오른쪽의 화살표 / 텍스트는 파일에 입력 할 내용이 아니라 내 메모 일뿐입니다).

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

따라서 파일을 다음과 같이 저장합니다.

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }

4
@lowerkey 최종 병합 결과를 원하는 방식으로 정확하게 표시합니다. 내 생각에는 gh-pages버전 의 일부만 원 하므로 <<<<<<to 에서 항목 을 ======삭제하고 한 >>>>>>줄을 제거하여 =======와 사이에 실제 코드 두 줄을 남겨 둡니다 >>>>>>.
— Amber

고마워요, 제가 이해하고있는 것 같아요. 머리에서 ======까지 모든 것을 삭제 한 다음 남은 HEAD 표시를 제거하십시오.
— lowerkey

1
네, 맞습니다. (처리 할 실제 "휴식"은 없습니다. 병합의 결과를 커밋하는 것입니다. 충돌이 없으면 Git이 일반적으로 자동으로 수행합니다.)
— Amber

2
@lowerkey, 주제에 대한 책 을 읽는 것도 고려하십시오 . VCS가 어떻게 작동하는지에 대한 특정 기본 지식이 부족한 것처럼 보이므로이 책 전체를 읽는 것이 좋으며 앞으로 발생할 수있는 문제에 대비하는 것이 좋습니다.
— kostix

1
얼마나 재밌습니까? 이 질문에 대한 답변은 다른 질문에서 찾을 수 있지만이 질문의 중복으로 표시된 질문에 대한 답변을 가리 킵니다.
— t3chb0t

22

당신이 가진 것을 확인하기 위해 절대적으로 'git status'로 시작하십시오. 병합을 중단 (또는 병합 중단)하고 작업 디렉토리에 충돌 파일이있는 경우 문제가 발생한 것입니다. Git 상태는 현재 위치를 알려줍니다. 그 후 여러 가지 옵션이 있습니다. 병합 커밋은 수동으로 해결해야합니다. 이는 어려울 수 있습니다. 또는 다음과 같은 도구를 사용하여 해결해야합니다.

git mergetool

병합 도구는 파일이 병합이 필요한 것으로 나열된 경우 작동합니다.

다음 중 하나를 수행 할 수도 있습니다.

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

: 1 : filename 구문을 사용하여 다른 버전을 볼 수 있습니다. 설명 은 여기 를 참조 하십시오 . 그러나 위의 모든 것은 'git status'가 병합이 필요한 파일을 표시한다고 가정합니다.

마지막으로, 항상 다음과 같은 옵션이 있습니다.

git reset --hard   # sounds like --hard is what you need but check other options

6
나는 " git status당신이 가지고 있는 것을보기 위해 시작하는 것"의 충고 를 두 번째로하고 싶다 : 상상의 복잡성 때문에 Git을 비난하는 것은 어떤 서클에서는 매혹적이지만, 사실은 출력을주의 깊게 읽는 git status것만으로 다음에 무엇을해야하는지 이해하기에 충분하다. 대부분의 일반적인 상황에서. 따라서 실제로 : 무언가 잘못되면 중지하고 읽고 git status생각하십시오.
— kostix

4

모든 대답이 맞지만 모든 충돌 표시를 자동 제거하고 HEAD를 유지하기 위해 파일을 자동 변경하려면 다음과 같이 자신의 bash 스크립트를 만들 수 있습니다.

예제 스크립트 :

# vim /usr/sbin/solve.git

(다음에 추가)

#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify

# chmod 755 /usr/sbin/solve.git

& GIT 저장소 / 경로에서 실행하여 해결하십시오.

$ cd <path_to_repo>
$ solve.git

주의 사항 :-위에서 언급 한 파일 확장자는 php, css, js, html, svg 및 txt입니다.


0

Atom에서는 일부 파일이 해결 된 병합 충돌을 드라이브에 저장하지 못하는 문제가있어서 수동으로 "저장"을 클릭해야했습니다. 알아내는 데 꽤 시간이 걸렸습니다.


0

나는 이 질문 에서 왔습니다 . 그리고 수동으로 파일을 편집하는 대신 절반으로 병합 된 파일을 병합하는 자동화 된 방법을 원했습니다 ( 다른 답변에서 제안한 것처럼 실제로 편안하지 않습니다 ). 그래서 여기에 내가 netbeans를 통해 한 일이 있지만 명령 줄을 통해서도 할 수 있습니다.

이제이 작업은. 직후에 merge->add->commit엉망임을 깨달았고 프로세스를 다시 진행하려는 경우에만 작동합니다 .

1 단계 : 이전 커밋으로 재설정합니다.

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

2 단계 : 분기 병합 다시 시도

git merge --ff origin/feature/YOUR-Branch_here

이 시점에서 GUI를 사용하는 경우 병합 창이 표시됩니다. 그런 다음 정상적으로 진행할 수 있습니다.

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