[git] Git과 명령 줄을 사용하여 병합하는 동안 로컬 파일이나 원격 파일을 유지하는 방법은 무엇입니까?

vimdiff를 사용하여 수정을 병합하는 방법을 알고 있지만 전체 파일을 보관하거나 버리는 것이 좋다고 가정하면 어떻게해야합니까?

나는 그들 각각에 대해 vimdiff를 열고 싶지 않다. 나는 ‘로컬 유지’또는 ‘원격 유지’라는 명령을 원한다.

EG : 누군가가 Windows에서 파일을 열고 EOL을 변경 한 후 커밋했기 때문에 변경된 것으로 표시된 파일과 병합되었습니다. 병합 할 때, 나는 내 자신의 버전을 유지하고 버리고 싶습니다.

나는 또한 그 반대에 관심이있다 : 나는 큰 시간을 망치고 원격 파일을 받아들이고 변경 사항을 버리고 싶다.



답변

당신은뿐만 아니라 할 수 있습니다 :

git checkout --theirs /path/to/file

원격 파일을 유지하려면 다음을 수행하십시오.

git checkout --ours /path/to/file

로컬 파일을 유지합니다.

그런 다음 git add그들과 모든 것이 완료됩니다.

판 : 이것은 merge시나리오를 위한 것임을 명심하십시오 . 작업 중 rebase --theirs은 지점을 말합니다.


답변

이 방법은 각 파일을 개별적으로 선택할 필요없이보다 간단 해 보입니다.

# keep remote files
git merge --strategy-option theirs
# keep local files
git merge --strategy-option ours

또는

# keep remote files
git pull -Xtheirs
# keep local files
git pull -Xours

직접 복사 :
당기는 동안 변경 사항에 따라 Git 병합 충돌 해결


답변

git checkout {branch-name} -- {file-name}

선택한 지점에서 파일을 사용합니다.

posh-git자동 완성 기능이 훌륭하게 작동 하기 때문에 이것을 좋아 합니다. 또한 어느 브랜치가 원격이고 어느 브랜치인지에 대한 모호성을 제거합니다. 그리고 --theirs어쨌든 나를 위해 작동하지 않았다.


답변

라인 엔드 문제는 다음을 참조하십시오 man git-merge.

--ignore-space-change
--ignore-all-space
--ignore-space-at-eol

Windows 클론 (.git / config) 을 추가 autocrlf = false하거나 추가하십시오.safecrlf = false

git mergetool 사용

다음과 같이 mergetool을 구성하는 경우 :

git config mergetool.cp.cmd '/bin/cp -v "$REMOTE" "$MERGED"'
git config mergetool.cp.trustExitCode true

그런 다음 간단한

git mergetool --tool=cp
git mergetool --tool=cp -- paths/to/files.txt
git mergetool --tool=cp -y -- paths/to/files.txt # without prompting

일을 할 것인가

간단한 자식 명령 사용

다른 경우에는

git checkout HEAD -- path/to/myfile.txt

트릭을해야합니다

망 쳤기 때문에 반대 방향으로 편집하십시오 .

git checkout remote/branch_to_merge -- path/to/myfile.txt


답변