Git에서 오래된 (마지막이 아닌) 커밋에 변경된 파일을 추가하는 방법
지난 한 시간 동안 여러 가지 사항을 변경하고 단계별로 커밋했지만 일부 커밋 전에 변경된 파일을 추가하는 것을 잊어 버렸습니다.
로그는 다음과 같습니다.
GIT TidyUpRequests u:1 d:0> git log
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce
Author: David Klein <>
Date: Tue Apr 27 09:43:55 2010 +0200
The Main program now tests both Webservices at once
commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463
Author: David Klein <>
Date: Tue Apr 27 09:43:27 2010 +0200
ISBNDBQueryHandler now uses the XPath functions from XPath.fs too
commit 06a504e277fd98d97eed4dad22dfa5933d81451f
Author: David Klein <>
Date: Tue Apr 27 09:30:34 2010 +0200
AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs
commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <>
Date: Tue Apr 27 09:29:53 2010 +0200
Factored out some common XPath Operations
어떤 아이디어?
사용하십시오 git rebase
. 구체적으로 특별히:
git stash
추가 할 변경 사항을 저장하는 데 사용하십시오 .- 사용하십시오
git rebase -i HEAD~10
(그러나 많은 커밋을 원합니다). - 줄의 시작 부분에서
a0865...
단어pick
를 로 변경하여 해당 커밋 ( )을 편집 할 수 있도록 표시하십시오edit
. 커밋이 삭제되므로 다른 줄은 삭제하지 마십시오. [^ vimnote] - rebase 파일을 저장하면 git은 쉘로 다시 돌아가서 커밋을 수정하기를 기다립니다.
- 를 사용하여 숨김을 팝
git stash pop
- 로 파일을 추가하십시오
git add <file>
. - 로 커밋을 수정하십시오
git commit --amend --no-edit
. - DO가
git rebase --continue
새에 대해 커밋의 나머지 부분을 다시 할을. - 편집을 위해 둘 이상의 커밋을 표시 한 경우 2 단계부터 반복하십시오.
[^ vimnote] : 당신이 사용하는 경우 vim
다음 명중 할 것이다 Insert다음, 편집에 키 Esc에서 입력 한 :wq
파일을 저장 편집기를 종료하고 변경 사항을 적용 할 수 있습니다. 또는을 사용하여 사용자 친화적 인 git commit 편집기 를 구성 할 수 있습니다git config --global core.editor "nano"
.
이전 커밋의 커밋 메시지를 변경하지 않고 작은 변경으로 기존 커밋을 "수정"하려면 OLDCOMMIT
다음과 같습니다 091b73a
.
git add <my fixed files>
git commit --fixup=OLDCOMMIT
git rebase --interactive --autosquash OLDCOMMIT^
git commit --squash=OLDCOMMIT
리베이스 중에 이전 커밋 메시지를 편집하는 데 사용할 수도 있습니다 .
git rebase --interactive
rebase 명령어 순서 를 확인 (또는 편집) 하기 위해 텍스트 편집기 (구성 할 수 있음 )를 불러옵니다 . 파일 에 rebase 명령 변경에 대한 정보 가 있습니다. 바로 저장하고 종료 (에디터 에서 REBASE를 계속 참조).:wq
vim
--autosquash
--fixup=OLDCOMMIT
커밋을 원하는 순서대로 자동으로 배치합니다 . 참고--autosquash
경우에만 유효한--interactive
옵션이 사용됩니다.- 는
^
에OLDCOMMIT^
의인 전에 커밋에 수단이 참조입니다OLDCOMMIT
.
위의 단계는 rebase 명령 시퀀스 를 확인 및 / 또는 수정하는 데 유용 하지만 다음과 같이 대화 형 rebase 텍스트 편집기를 건너 뛰거나 자동화 할 수도 있습니다.
GIT_SEQUENCE_EDITOR
스크립트로 설정 .- 대기중인 모든 수정 사항 을 자동으로 스쿼시하기 위한 git 별명 작성
- 단일 커밋 을 자동으로 수정하기 위해 자식 별칭 만들기
git commit 및 git rebase를 참조하십시오 . 항상 git history를 다시 작성할 때는 아직 다른 사람 (임의 인터넷 사용자 및 빌드 서버 포함)에게 게시하지 않은 커밋 만 수정해야합니다.
git 1.7에서는 다음을 사용하는 정말 쉬운 방법이 있습니다 git rebase
.
파일 준비 :
git add $files
새로운 커밋을 만들고 "깨진"커밋의 커밋 메시지를 재사용
git commit -c master~4
fixup!
제목 줄 앞에 추가 하거나 squash!
커밋 (메시지)을 편집하려는 경우 :
fixup! Factored out some common XPath Operations
git rebase -i --autosquash
커밋을 수정 하는 데 사용
rebase --interactive
이전 커밋을 수정하기 위해 세션을 시도 할 수 있습니다 ( 이 커밋을 다른 리포지토리로 푸시하지 않은 경우 ).
때때로 b.2에서 수정 된 것. 커밋은 패치 시리즈에 깊이 묻혀 있기 때문에 수정하지 않은 완벽한 커밋으로 수정할 수 없습니다 .
이것이 바로 대화식 리베이스의 목적입니다. 커밋을 재 배열하고 편집하고 여러 커밋을 하나로 스 쿼싱하여 많은 "a"와 "b"후에 사용하십시오.그대로 유지하려는 마지막 커밋으로 시작하십시오.
git rebase -i <after-this-commit>
주어진 커밋 뒤에 오는 현재 분기의 모든 커밋 (병합 커밋 무시)으로 편집기가 시작됩니다.
이 목록의 커밋을 마음의 내용으로 재정렬하고 제거 할 수 있습니다. 목록은 다음과 같이 다소 비슷합니다.
pick deadbee The oneline of this commit
pick fa1afe1 The oneline of the next commit
...
oneline 설명은 순전히 당신의 즐거움을위한 것입니다. git rebase는 커밋 이름 (이 예제에서는 "deadbee"및 "fa1afe1")을 보지 않으므로 이름을 삭제하거나 편집하지 마십시오.
"pick"명령을 "edit"명령으로 대체하면 커밋을 적용한 후 git rebase에게 중지하도록 지시하여 파일 및 / 또는 커밋 메시지를 편집하고 커밋을 수정 한 후 rebasing을 계속할 수 있습니다.
'Programming' 카테고리의 다른 글
sed에서 욕심 많은 (reluctant) 정규 표현식 일치? (0) | 2020.02.23 |
---|---|
브라우저의 "F5"및 "Ctrl + F5"새로 고침은 어떤 요청을 생성합니까? (0) | 2020.02.23 |
dex를 실행할 수 없음 : 여러 dex 파일이 Lcom / myapp / R $ array를 정의합니다. (0) | 2020.02.23 |
dict.copy () 이해하기-얕은가요? (0) | 2020.02.23 |
Visual Studio 2017 오류 : 프로그램을 시작할 수 없습니다. 현재 상태에서 작업이 유효하지 않습니다 (0) | 2020.02.23 |