[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