programing

git pull 커밋되지 않은 로컬 변경 유지

stoneblock 2023. 7. 18. 21:29

git pull 커밋되지 않은 로컬 변경 유지

업스트림 변경사항이 있더라도 특정 파일을 변경하지 않고 안전하게 Agit 프로젝트를 업데이트(풀)하려면 어떻게 해야 합니까?

myrepo/config/config.php

원격에서 이 파일을 변경하더라도 Git Pull을 실행하면 다른 모든 것이 업데이트되지만 이 파일은 변경되지 않습니다(통합되지도 않음).

PS. Git 기반 배포 스크립트만 작성하고 있기 때문에 요청한 작업을 수행해야 합니다.구성 파일을 템플릿으로 변경할 수 없습니다.

그래서 로컬로 변경된 내용을 잃지 않는 업데이트 스크립트를 작성하는 방법이 필요합니다.저는 다음과 같은 간단한 것을 바라고 있었습니다.

git assume-remote-unchanged file1
git assume-remote-unchanged file2

그리고나서git pull

Gitstash 기반의 간단한 솔루션이 있습니다.당신이 변경한 모든 것을 저장하고, 모든 새로운 것을 끌어내고, 당신의 저장고를 적용합니다.

git stash
git pull
git stash pop

스택 팝업에 충돌이 있을 수 있습니다.당신이 묘사한 경우에는 실제로 충돌이 있을 것입니다.config.php하지만, 여러분이 창고에 넣어둔 것이 여러분이 원하는 것이라는 것을 알기 때문에 갈등을 해결하는 것은 쉽습니다.다음과 같이 하십시오.

git checkout --theirs -- config.php

사용합니다

git pull -X ours

병합할 때 로컬 버전을 사용하도록 지시합니다.

대부분의 풀러에서 사용자 지정해야 하는 파일이 저장소에 있는 경우 다음과 같은 이름으로 파일 이름을 변경합니다.config.php.template추가config.php당신에게.gitignore.

업데이트: 이것은 문자 그대로 질문에 대한 대답이지만, 저는 Kurzed Metal의 대답이 정말 여러분이 원하는 것이라고 생각합니다.

다음을 가정할 때:

  1. 당신은 그 지점에 있습니다.master
  2. 업스트림 분기는masterorigin
  3. 커밋되지 않은 변경 사항이 없습니다.

할 수 있는 일:

# Do a pull as usual, but don't commit the result:
git pull --no-commit

# Overwrite config/config.php with the version that was there before the merge
# and also stage that version:
git checkout HEAD config/config.php

# Create the commit:
git commit -F .git/MERGE_MSG

자주 사용해야 하는 경우 이에 대한 별칭을 만들 수 있습니다.변경 내용을 커밋하지 않은 경우config/config.php이것은 그들을 버릴 것입니다.

리베이스로 깃 풀도 해볼 수 있습니다.

git pull --rebase origin dev

로컬에서 커밋되지 않은 변경 사항이 있는 경우 풀링 중에 병합 충돌을 방지하기 위해 다음을 수행합니다.

git stash save
git pull
git stash pop

출처:

https://git-scm.com/docs/git-stash

질문에 답하려면: 체크아웃의 특정 파일을 제외하려면 sparse-checkout을 사용할 수 있습니다.

  1. .git/info/sparse-checkout유지할 항목을 정의합니다.여기서는 (*)을 제외한 모든 구성을 원합니다( 느낌표 참고).php :

    !/config.php

  2. 스파스 체크아웃을 고려할 것임을 알려줍니다.

    git 구성 core.sparseCheckout true

  3. 이 파일을 이미 로컬로 가져온 경우, git가 희박한 체크아웃에서 수행하는 작업을 수행합니다("작업 트리 건너뛰기" 플래그를 설정하여 이 파일을 제외해야 한다고 말합니다).

    git update-index --sys-worktree 구성.php

  4. 저장소의 변경 사항에 관계없이 config.php 파일이 있는 저장소를 즐기십시오.


구성 값은 소스 제어에 있으면 안 됩니다.

  • 잠재적인 보안 침해입니다.
  • 배포 시 이와 같은 문제가 발생합니다.

즉, 이를 제외하고(처음 커밋하기 전에 .gitignore에 저장), 앱을 체크아웃하는 각 인스턴스에 적절한 파일을 만들어야 합니다("템플릿" 파일 복사 및 적용).

git에 의해 파일이 처리되면 .gitignore는 영향을 받지 않습니다.

파일이 소스 제어 하에 있으면 두 가지 옵션()만 선택할 수 있습니다.

  • 작성합니다( 모든기록사기변파제다니거합일을여용하경본의).git filter-branch)

  • 파일을 제거하는 커밋을 만듭니다.그것은 지는 싸움과 같지만, 가끔은 그것을 감수해야 합니다.

언급URL : https://stackoverflow.com/questions/10414769/git-pull-keeping-local-uncommitted-changes