이전 커밋을 체크아웃하고 새 커밋으로 만듭니다.
Git에서, 내가 커밋을 망쳤다고 치고, 나는 3번 커밋 전 버전을 새로운 버전으로 만들고 싶습니다.내가 하면,git checkout xxxx
새 분기를 생성하고 병합만 할 수 있는 것 같습니까?이것을 새로운 "마스터 버전"으로 만들 수 있습니까?
원하는 항목:
A-B-C-D-E
되기 위해
A-B-C-D-E-F
여기서 F는 C와 정확히 같은 내용을 갖습니다.
사용할 경우git revert xxxx
그 대신에 분명히 충돌이 있을 것 같고 수동으로 해결해야 합니다.
제가 정말 원하는 것은 제 작업 디렉토리나 최근 커밋에 있는 내용에 상관없이 이전 커밋을 어느 시점에서 새 커밋으로 만드는 것입니다.
제가 이걸 어떻게 해야 할까요?
git rm -r .
git checkout HEAD~3 .
git commit
커밋 후 새 파일HEAD
개정판에서와 동일할 것입니다.HEAD~3
.
C로 재설정하려는 것처럼 들립니다. 즉, 트리를 만듭니다.
A-B-C
로 할 수 있습니다.reset
:
git reset --hard HEAD~3
(참고: 당신은 3개의 커밋 전에 말했다. 그래서 내가 그렇게 썼다. 당신의 예에서 C는 단지 2개의 커밋 전이기 때문에 당신은 아마도 사용하고 싶을 것입니다.HEAD~2
)
사용할 수도 있습니다.revert
원하신다면, 제가 알기로는 한 번에 하나씩 되돌리셔야 합니다.
git revert HEAD # Reverts E
git revert HEAD~2 # Reverts D
그러면 D와 같은 내용인 F 커밋과 C와 같은 내용인 G가 새로 생성됩니다.넌 할 수 있다.rebase
당신이 원한다면 그것들을 뭉개는 것.
엘룬은 그것을 파일별로 했습니다.
git checkout <commit-hash> <filename>
하지만 당신은 모든 파일을 더 쉽게 체크아웃할 수 있습니다.
git checkout <commit-hash> .
이것이 바로 제가 하고 싶었던 것입니다.이전 명령을 확신할 수 없었습니다.git cherry-pick C
듣기에는 좋은데, 같은 지점이 아닌 다른 지점에서 변경을 받기 위해 이렇게 하는 것 같은데, 시도해 본 사람이 있나요?
그래서 저는 또한 효과가 있는 다른 것을 했습니다: 저는 이전 커밋 파일에서 원하는 파일을 파일별로 받았습니다.
git checkout <commit-hash> <filename>
ex :git checkout 08a6497b76ad098a5f7eda3e4ec89e8032a4da51 file.css
-> 이전 커밋의 파일을 그대로 가져옵니다.
그리고 나서 나는 내 변화를 했습니다.그리고 다시 죄를 지었습니다.
git status (to check which files were modified)
git diff (to check the changes you made)
git add .
git commit -m "my message"
나는 나의 이력을 확인했습니다.git log
그리고 나는 여전히 내 역사를 가지고 있고, 오래된 파일들로 만든 새로운 변화들도 가지고 있습니다.그리고 저도 밀 수 있어요.
원하는 상태로 돌아가려면 커밋의 해시를 원하지 않는 변경보다 먼저 지정해야 합니다.또한 변경하기 전에 커밋되지 않은 변경사항이 없는지 확인합니다.
git cherry-pick C
여기서 C는 C에 대한 커밋 해시입니다.최신 커밋 위에 이전 커밋이 적용됩니다.
지금까지의 다른 답변은 이전 커밋에 있는 것을 실행 취소하는 새 커밋을 만듭니다.과거로 돌아가서 "역사를 바꾸는 것"은 가능하지만, 이것은 조금 위험할 수 있습니다.변경하는 커밋이 다른 리포지토리로 푸시되지 않은 경우에만 이 작업을 수행해야 합니다.
는 당이찾명는입니다.git rebase --interactive
하고자 하는 는 HEAD~3입니다.git rebase --interactive HEAD~4
텍스트 편집기가 열리고 변경할 커밋을 지정할 수 있습니다.
중요한 작업을 수행하기 전에 다른 저장소에서 연습하십시오.맨 페이지는 당신이 필요로 하는 모든 정보를 제공할 것입니다.
언급URL : https://stackoverflow.com/questions/3380805/checkout-old-commit-and-make-it-a-new-commit
'source' 카테고리의 다른 글
판다의 큰 상관 행렬에서 가장 높은 상관 관계 쌍을 나열하시겠습니까? (0) | 2023.07.20 |
---|---|
보조 그룹에만 연결된 경우 Oracle이 로컬 파일을 읽을 수 있습니까? (0) | 2023.07.20 |
형식 스크립트의 문자열 보간, '자리 표시자'를 변수로 바꾸기 (0) | 2023.07.15 |
spring-boot:run과 spring-boot:start의 차이점은 무엇입니까? (0) | 2023.07.15 |
git --git-timeout이 예상대로 작동하지 않습니다. (0) | 2023.07.15 |