커밋을 병합하지 않고 변경 사항을 단일 파일로 병합하려면 어떻게 해야 합니까?
저는 두 개의 지점(A와 B)이 있는데, A 지점의 단일 파일을 B 지점의 해당 단일 파일과 병합하고 싶습니다.
저도 같은 문제를 발견했습니다., 저는 두 의 지점을 있습니다.A
그리고.B
동일한 파일이지만 일부 파일에서는 다른 프로그래밍 인터페이스를 사용합니다. 파일의 는 다음과 같습니다.f
두 분기의 인터페이스 차이와 무관하게 분기에서 변경되었습니다.B
하지만 그 변화는 두 지점 모두에 중요합니다.따라서 파일만 병합해야 합니다.f
의 지점의B
종로로f
의 지점의A
.
사항이 두 명령으로 되었습니다.A
그리고.B
:
git checkout A
git checkout --patch B f
번째 는 분기 " 번명은령전환니다됩분로기첫째▁the"로 됩니다.A
내가 합병하고 싶은 곳으로B
의 파일 의일버f
" 번째명은파패치니다합을일두령▁the다▁file니▁the패"를 패치합니다.f
와 함께f
HEAD
B
패치의 단일 부분을 승인/폐기할 수도 있습니다.에 에.B
커밋을 할 수 . 이 "" ""일 는 없습니다. 반드시 커밋을 지정할 필요는 없습니다.HEAD
.
커뮤니티 편집:파일이f
B
에 .A
하지만, 그런 다음 생략합니다.--patch
선택. 않으면 그렇지 않으면 "변경 없음" 메시지가 표시됩니다.
이것은 git의 내부 diff 툴을 사용합니다.아마 할 일이 조금 있지만 직접적으로 해야 할 것 같습니다.
#First checkout the branch you want to merge into
git checkout <branch_to_merge_into>
#Then checkout the file from the branch you want to merge from
git checkout <branch_to_merge_from> -- <file>
#Then you have to unstage that file to be able to use difftool
git reset HEAD <file>
#Now use difftool to chose which lines to keep. Click on the mergebutton in difftool
git difftool
#Save the file in difftool and you should be done.
이런 상황에서 제가 하는 일은 이렇습니다.그것은 둔탁하지만 나에게 딱 맞습니다.
- 작업 분기를 기반으로 다른 분기를 만듭니다.
- git pull/git merge 복사할 파일이 포함된 개정판(SHA1)을 선택합니다.이렇게 하면 모든 변경 사항이 병합되지만 이 분기를 사용하여 하나의 파일만 가져올 수 있습니다.
- 충돌 등을 해결하고 파일을 조사합니다.
- 당신의 일하는 지점을 확인하세요.
- 병합에서 커밋된 파일을 확인합니다.
- 커밋합니다.
저는 패치를 시도했지만 제 상황은 그것에 비해 너무 추악했습니다.간단히 말하면 다음과 같습니다.
작업 분기: A 실험 분기: B (파일 포함)접고 싶은 변경 사항이 있는 txt.)
git checkout A
A을(를) 기준으로 새 분기 생성:
git checkout -b tempAB
B를 임시로 병합AB
git merge B
병합의 sha1 해시를 복사합니다.
git log
commit 8dad944210dfb901695975886737dc35614fa94e
Merge: ea3aec1 0f76e61
Author: matthewe <matthewe@matthewe.com>
Date: Wed Oct 3 15:13:24 2012 -0700
Merge branch 'B' into tempAB
작업 중인 지점을 확인합니다.
git checkout A
복구된 파일을 확인합니다.
git checkout 7e65b5a52e5f8b1979d75dffbbe4f7ee7dad5017 file.txt
그리고 거기서 당신은 그것을 가져야 합니다.결과를 커밋합니다.
저는 이 접근법이 간단하고 유용하다고 생각했습니다.다른 분기에서 특정 파일을 "병합"하는 방법
알고 보니, 우리는 너무 열심히 노력하고 있습니다.우리의 좋은 친구 git checkout은 그 일에 적합한 도구입니다.
git checkout source_branch <paths>...
우리는 단순히 Git Checkout에 기능 분기 A의 이름과 마스터 분기에 추가하고자 하는 특정 파일의 경로를 제공할 수 있습니다.
더 많은 이해를 위해 전체 기사를 읽으십시오.
다음을 사용할 수 있습니다.
git merge-file
팁: https://www.kernel.org/pub/software/scm/git/docs/git-merge-file.html
다음 명령은 (1) 올바른 분기의 파일을 비교하고 마스터(2) 적용할 수정 사항을 대화식으로 묻습니다.
git checkout --patch master <fn>
B가 현재 분기라고 가정합니다.
$ git diff A <file-path> > patch.tmp
$ git apply patch.tmp -R
변경사항은 로컬 파일에만 적용됩니다.나중에 커밋해야 합니다.
병합할 파일의 이전 버전을 체크아웃하여 다른 이름으로 저장한 다음 두 파일에 있는 병합 도구를 실행할 수 있습니다.
예를 들면
git show B:src/common/store.ts > /tmp/store.ts
(여기서 B는 지점 이름/커밋/태그)
meld src/common/store.ts /tmp/store.ts
로 하겠습니다.
git format-patch branch_old..branch_new file
이렇게 하면 파일에 대한 패치가 생성됩니다.
대상 branch_old에서 패치 적용
git am blahblah.patch
잘못된 병합 후 이 작업을 수행해야 하는 경우 다음과 같은 작업을 수행할 수 있습니다.
# If you did a git pull and it broke something, do this first
# Find the one before the merge, copy the SHA1
git reflog
git reset --hard <sha1>
# Get remote updates but DONT auto merge it
git fetch github
# Checkout to your mainline so your branch is correct.
git checkout develop
# Make a new branch where you'll be applying matches
git checkout -b manual-merge-github-develop
# Apply your patches
git checkout --patch github/develop path/to/file
...
# Merge changes back in
git checkout develop
git merge manual-merge-github-develop # optionally add --no-ff
# You'll probably have to
git push -f # make sure you know what you're doing.
git checkout <target_branch>
git checkout <source_branch> <file_path>
언급URL : https://stackoverflow.com/questions/10784523/how-do-i-merge-changes-to-a-single-file-rather-than-merging-commits
'programing' 카테고리의 다른 글
로컬 Gitrepo에 파일을 나열하시겠습니까? (0) | 2023.05.23 |
---|---|
이클립스가 새 플러그인을 다운로드할 수 있도록 프록시 설정을 구성하려면 어떻게 해야 합니까? (0) | 2023.05.23 |
NameError를 제공하는 모듈을 다시 로드하는 중: 이름 'reload'가 정의되지 않았습니다. (0) | 2023.05.23 |
변경된 입력 텍스트 상자 탐지 (0) | 2023.05.23 |
Linux Bash에서 더블 앰퍼샌드(&&)와 세미콜론(;)의 차이점은 무엇입니까? (0) | 2023.05.23 |