완전히 합쳐진 두 개의 지점이 있습니다.
그러나 병합이 완료되면 하나의 파일이 병합에 의해 엉망이 된 것을 알고 (다른 사람은 자동 형식을 수행했습니다. gah) 다른 지점의 새 버전으로 변경하는 것이 더 쉬울 것입니다. 그런 다음 한 줄의 변경 사항을 지점으로 가져간 후 다시 삽입하십시오.
그래서 git에서 가장 쉬운 방법은 무엇입니까?
완전히 합쳐진 두 개의 지점이 있습니다.
그러나 병합이 완료되면 하나의 파일이 병합에 의해 엉망이 된 것을 알고 (다른 사람은 자동 형식을 수행했습니다. gah) 다른 지점의 새 버전으로 변경하는 것이 더 쉬울 것입니다. 그런 다음 한 줄의 변경 사항을 지점으로 가져간 후 다시 삽입하십시오.
그래서 git에서 가장 쉬운 방법은 무엇입니까?
답변:
파일을 끝내려는 지점에서 이것을 실행하십시오.
git checkout otherbranch myfile.txt
일반 식 :
git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>
몇 가지 메모 (의견) :
myfile.txt
및mydir
대안:
git show commit_id:path/to/file > path/to/file
''
하므로 셸에서 해석하지 않도록 랩핑하면됩니다 .
나는 비슷한 검색 에서이 질문에 도달했습니다. 필자의 경우 다른 지점에서 파일을 원래 작업 위치와 다른 현재 작업 디렉토리로 추출하려고했습니다. 답변 :
git show TREEISH:path/to/file >path/to/local/file
git diff <other branch> <path to file>
잘 작동합니다.
Checkout 명령 사용은 어떻습니까?
git diff --stat "$branch"
git checkout --merge "$branch" "$file"
git diff --stat "$branch"
git diff
--stat
기본적으로 diffstat와 동일한 기능을하는 인수를 지원합니다 .
1) 파일 사본이 필요한 지점에 있는지 확인하십시오. 예를 들어 : 나는 마스터에 하위 분기 파일을 원하므로 체크 아웃해야하거나 마스터에 있어야합니다git checkout master
2) 이제 하위 브랜치에서 마스터로 원하는 특정 파일을 체크 아웃하십시오.
git checkout sub_branch file_path/my_file.ext
여기서 sub_branch
파일이있는 위치와 복사해야하는 파일 이름이 있습니다.
나는 git restore
(git 2.23부터 사용 가능)
git restore --source otherbranch path/to/myfile.txt
다른 옵션보다 좋은 이유는 무엇입니까?
git checkout otherbranch -- path/to/myfile.txt
-파일을 작업 디렉토리로 복사하지만 준비 영역으로 복사합니다 (이 파일을 수동으로 복사하여 실행 git add
하는 것과 유사한 효과 ). 옵션으로 git restore
지시하지 않는 한 준비 영역을 건드리지 않습니다 --staged
.
git show otherbranch:path/to/myfile.txt > path/to/myfile.txt
표준 쉘 리디렉션을 사용합니다. Powershell을 사용하는 경우 텍스트 인코딩에 문제가 있거나 바이너리 파일 인 경우 파일이 손상 될 수 있습니다. 으로 git restore
변경 파일이 모두 이루어집니다 git
실행.
다른 장점은 다음을 사용하여 전체 폴더를 복원 할 수 있다는 것입니다.
git restore --source otherbranch path/to
또는 git restore --overlay --source otherbranch path/to
파일 삭제를 피하려면을 사용하십시오. 예를 들어 otherbranch
, 현재 작업중인 디렉토리보다 파일이 적고 옵션 이 없으면 이 파일이 추적 됩니다. 그러나 이것은 좋은 기본 바하 우어입니다. 디렉토리의 상태가 "같은 것이 아니라 현재의 분기에 추가 파일이있는" 과 같이 동일하기를 원할 것입니다--overlay
git restore
otherbranch
git restore
소스 분기 에서 대상 분기 의 새 파일 로 파일을 복사 하는 방법이 있습니까? git show를 사용하면 쉘 리디렉션 ( git show otherbranch:path/to/file1.txt > path/to/file2.txt
) 으로이 작업을 수행 할 수 있지만 언급 한 이유로 쉘 리디렉션을 피하고 싶습니다.
git restore
(그러나 누가 알겠습니까?). 이 리디렉션 문제는 기본적으로 Powershell 문제입니다. 문제가있는 다른 쉘이 있는지 확실하지 않습니다. 나는 보통 "git bash"나 심지어 "cmd"로 돌아가서 " git show
redirection"명령 을 사용해야한다 . 또는 GitExtensions와 같은 GUI를 사용하여 커밋 파일 트리를 탐색하고 파일에서 "다른 이름으로 저장"을 클릭하십시오.
제발 허용 대답에, 첫 번째 옵션이 있습니다 스테이지 (같은 다른 지점에서 전체 파일을 git add ...
수행했다), 그리고 당신이 가진 것처럼 파일을 복사 단지 결과 두 번째 옵션이 있지만 (변경 사항을 무대되지 않습니다 파일을 수동으로 편집했으며 눈에 띄는 차이가 있습니다).
단계적 변경 (예 git add filename)
:
$ git checkout directory/somefile.php feature-B
$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: directory/somefile.php
미해결 변경 (스테이지 또는 커밋되지 않은) :
$ git show feature-B:directory/somefile.php > directory/somefile.php
$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: directory/somefile.php
no changes added to commit (use "git add" and/or "git commit -a")