오래된 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 |