전체 커밋이 아닌 하나의 파일에 변경 사항을 선택하는 방법
한 지점에 도입 된 변경 사항을 다른 지점에 적용해야합니다. 체리 픽을 사용해서 할 수 있습니다. 하지만 제 경우에는 하나의 파일에만 관련된 변경 사항을 적용하고 싶기 때문에 전체 커밋을 선택하지 않습니다. 그렇게하는 방법?
달성 가능한 것에 따라 옵션이 있습니다.
파일 내용을 대상 분기와 동일하게 입찰 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
메모리에서 제거
이제 분기가 꽤 깨끗합니다 (이전 커밋으로 되돌림).
'IT' 카테고리의 다른 글
함수형 프로그래밍 (Scala 및 Scala API)에서 reduce와 foldLeft / fold의 차이점은 무엇입니까? (0) | 2020.08.31 |
---|---|
정적 제네릭 메서드 호출 (0) | 2020.08.30 |
백 스택에서 재개에 대한 조각 (0) | 2020.08.30 |
여러 생성 기능을위한 JavaScript 패턴 (0) | 2020.08.30 |
gulp.src가 파일에 대한 전체 경로 배열을 전달하는 것을 좋아하지 않는 이유는 무엇입니까? (0) | 2020.08.30 |