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.