오래된 Git commit을 어떻게 수정합니까?
나는 3번의 Git 커밋을 했지만, 추진되지 않았습니다.최신 버전이 아닌 이전 버전(ddc6859af44)과 (47175e84c)을 어떻게 수정할 수 있습니까?
$git log
commit f4074f289b8a49250b15a4f25ca4b46017454781
Date: Tue Jan 10 10:57:27 2012 -0800
commit ddc6859af448b8fd2e86dd0437c47b6014380a7f
Date: Mon Jan 9 16:29:30 2012 -0800
commit 47175e84c2cb7e47520f7dde824718eae3624550
Date: Mon Jan 9 13:13:22 2012 -0800
git rebase -i HEAD^^^
을 제수항표시다니합목으로 하세요.edit
또는e
(교체)pick
저장하고 종료합니다.
이제 변경하십시오.
git add .
git rebase --continue
추가 삭제를 추가하려면 commit 명령에서 옵션을 제거합니다.메시지를 조정하려면 다음 항목만 생략합니다.--no-edit
선택.
저는 오래된 것으로 수정하고 싶다는 약속을 준비했는데, 기본적인 것을 보고 놀랐습니다. 저는 변경 사항을 커밋하지 않았다고 불평했습니다.그러나 이전 커밋의 편집 옵션을 지정하여 다시 변경하고 싶지 않았습니다.솔루션은 매우 쉽고 간단했습니다.
- 이전 커밋에 대한 업데이트 준비, 추가 및 커밋
git rebase -i <commit you want to amend>^
^
그래서 당신은 텍스트 편집기에서 위의 커밋을 볼 수 있습니다.당신은 다음과 같은 것을 얻을 것입니다:
pick 8c83e24 use substitution instead of separate subsystems file to avoid jgroups.xml and jgroups-e2.xml going out of sync pick 799ce28 generate ec2 configuration out of subsystems-ha.xml and subsystems-full-ha.xml to avoid discrepancies pick e23d23a fix indentation of jgroups.xml
이제 e23d23a와 8c83e24를 결합하려면 라인 순서를 변경하고 다음과 같이 스쿼시를 사용할 수 있습니다.
pick 8c83e24 use substitution instead of separate subsystems file to avoid jgroups.xml and jgroups-e2.xml going out of sync squash e23d23a fix indentation of jgroups.xml pick 799ce28 generate ec2 configuration out of subsystems-ha.xml and subsystems-full-ha.xml to avoid discrepancies
파일을 쓰고 종료하면 편집자와 함께 커밋 메시지를 병합할 수 있습니다.이렇게 하고 텍스트 문서를 저장/종료합니다.
- 완료되었습니다. 커밋이 수정되었습니다.
크레딧은 다음 사람에게 전달됩니다. http://git-scm.com/book/en/Git-Tools-Rewriting-History 다른 유용한 입증된 깃 마법도 있습니다.
저는 몇 번 다른 방법을 사용했습니다., 그은매입니다뉴얼것사입니다.git rebase -i
이 기능은 커밋의 일부를 스퀴즈하거나 분할하는 것을 포함하여 여러 커밋을 재정렬하려는 경우에 유용합니다.가장 큰 장점은 모든 약속의 운명을 단 한 순간에 결정할 필요가 없다는 것입니다.또한 기본 재배치 시와는 달리 프로세스 중에 모든 Git 기능을 사용할 수 있습니다.예를 들어, 언제든지 원본 기록과 다시 작성된 기록의 로그를 모두 표시하거나 다른 기본 재배치를 수행할 수 있습니다!
다음과 같은 방법으로 커밋을 참조하여 쉽게 읽을 수 있도록 하겠습니다.
C # good commit after a bad one
B # bad commit
A # good commit before a bad one
처음 사용자의 기록은 다음과 같습니다.
x - A - B - C
| |
| master
|
origin/master
다음과 같은 방법으로 재생성합니다.
x - A - B*- C'
| |
| master
|
origin/master
절차.
git checkout B # get working-tree to the state of commit B
git reset --soft A # tell Git that we are working before commit B
git checkout -b rewrite-history # switch to a new branch for alternative history
을 사용하여 이전 합니다.git add
(git add -i
,git stash
등) 지금.이전 커밋을 두 개 이상으로 분할할 수도 있습니다.
git commit # recreate commit B (result = B*)
git cherry-pick C # copy C to our new branch (result = C')
중간 결과:
x - A - B - C
| \ |
| \ master
| \
| B*- C'
| |
| rewrite-history
|
origin/master
끝냅시다:
git checkout master
git reset --hard rewrite-history # make this branch master
또는 하나의 명령어만 사용:
git branch -f master # make this place the new tip of the master branch
바로 그거야, 할 수 있어요.push
지금 당신의 진전.
마지막 작업은 임시 분기를 삭제하는 것입니다.
git branch -d rewrite-history
다음을 사용할 수 있습니다.git rebase
커밋 기록을 다시 작성합니다.이것은 잠재적으로 변경사항에 영향을 미칠 수 있으므로 주의하여 사용하십시오.
먼저 "수정" 변경 사항을 일반적인 커밋으로 커밋합니다.그런 다음 가장 오래된 커밋의 상위 항목부터 대화형 기본 재배치를 수행합니다.
git rebase -i 47175e84c2cb7e47520f7dde824718eae3624550^
편집자가 모든 커밋으로 시작됩니다.수정할 "수정" 커밋이 수정할 커밋 아래로 오도록 다시 정렬합니다.그런 다음 줄의 첫 번째 단어를 다음과 같은 "수정" 커밋으로 바꿉니다.s
이전의 커밋과 결합(스캐시)합니다.편집기를 저장하고 종료한 후 지시사항을 따릅니다.
사용할 수 있습니다.git rebase --interactive
사용edit
수정할 커밋에 대한 명령입니다.
OP가 지정된 2개의 커밋을 1로 스퀴시려는 경우, 리베이스 없이 수행할 수 있는 다른 방법이 있습니다.
git checkout HEAD^ # go to the first commit you want squashed
git reset --soft HEAD^ # go to the second one but keep the tree and index the same
git commit --amend -C HEAD@{1} # use the message from first commit (omit this to change)
git checkout HEAD@{3} -- . # get the tree from the commit you did not want to touch
git add -A # add everything
git commit -C HEAD@{3} # commit again using the message from that commit
그@{N)
구문은 참조가 있었던 위치의 기록을 참조할 수 있기 때문에 알기 쉽습니다.이 경우 현재 커밋을 나타내는 것은 HEAD입니다.
언급URL : https://stackoverflow.com/questions/8824971/how-to-amend-older-git-commit
'programing' 카테고리의 다른 글
자동 구성을 중단하지 않고 Spring-Boot에서 MappingMongoConverter(setMapKeyDotReplacement)를 사용자 지정하는 방법은 무엇입니까? (0) | 2023.07.10 |
---|---|
가지고 놀만한 흥미로운 C/C++ 라이브러리는 무엇입니까? (0) | 2023.07.10 |
파이썬의 클래스 상수 (0) | 2023.07.10 |
단일 SQL 연결에서 여러 SQL 명령을 실행하는 방법은 무엇입니까? (0) | 2023.07.10 |
ggplot2 플롯 영역 여백? (0) | 2023.07.10 |