IT

전체 커밋이 아닌 하나의 파일에 변경 사항을 선택하는 방법

lottoking 2020. 8. 30. 09:06
반응형

전체 커밋이 아닌 하나의 파일에 변경 사항을 선택하는 방법


한 지점에 도입 된 변경 사항을 다른 지점에 적용해야합니다. 체리 픽을 사용해서 할 수 있습니다. 하지만 제 경우에는 하나의 파일에만 관련된 변경 사항을 적용하고 싶기 때문에 전체 커밋을 선택하지 않습니다. 그렇게하는 방법?


달성 가능한 것에 따라 옵션이 있습니다.

파일 내용을 대상 분기와 동일하게 입찰 git checkout <branch> -- <filename>. 그러나 이것은 단일 한 파일의 결과 상태를 취하지 않습니다. 커밋에 한 줄을 추가했지만 이전 커밋이 더 많이 변경되고 다른 변경 사항없이 해당 줄만 추가하려는 경우 체크 아웃이 원하는 것이 아닙니다.

복수의 확장 파일에 도입 된 경우 패치를 단일 파일에만 적용하려는 경우 여러 옵션이 있습니다. 을 사용할 수 있습니다 git cherry-pick -n. 즉, 커밋을 편집하지 않고 커밋을 편집 할 수 있습니다 (예를 들어를 사용하여 모든 파일을 파일을 git reset -- .사용하여 변경하려는 파일을 추가합니다 git add <filename>). 또는 파일에 대한 diff를 만들고 diff를 적용한 다음 다음을 수행 할 수 있습니다.

git diff <branch>^..<branch> -- <filename> | git apply

생성 patch file하고 적용하십시오.

git diff branchname -- filename > patchfile
git apply patchfile

편집하다 :

커밋에서 변경 사항을 가져와야 다음과 같이 패치를 만듭니다.

git show sha1 -- filename > patchfile

또 다른 방법은 로컬에서 패치를 장비입니다.

git checkout {<name_of_branch>, commit's SHA} <path to the file> 

그래도 체리 따는 것은 아닙니다.


힘내는 모든 준비가되어 있습니다 :)

그냥 사용 git checkout <sha> <path-to-file>


git checkout the_branch_with_the_change the/path/to/the/file/you/want.extension

이 다른 브랜치의 단일 파일을 현재 작업 브랜치로 작업하려는 경우 작동합니다.


이 당신이 찾고있는 것입니다 :

git checkout target-branch sha1 path/to/file

sha1은 선택 사항입니다.


내가하는 경향이있는 것은 git ls-tree

그냥 해 :

git ls-tree -r <commit-id> |grep 'your filename'
# there will be output that shows a SHA1 of your file
git show ${SHA1 of your file} > 'your filename'

이 grep과 일치하는 모든 파일 이름을 인쇄하고 커밋에있는 파일의 SHA1 키를 제공합니다.

Git show는 브랜치 외부의 파일을 사용할 수 있습니다. >쉘에서 사용하여 출력을 파일로 파이프하면 원하는 결과를 얻을 수 있습니다.


git reset HEAD~1

파일을 사전 커밋 단계로 이동

git stash

메모리에서 제거

이제 분기가 꽤 깨끗합니다 (이전 커밋으로 되돌림).

참고 URL : https://stackoverflow.com/questions/16068186/how-to-cherry-pick-only-changes-for-only-one-file-not-the-whole-commit

반응형