source

이전 커밋을 체크아웃하고 새 커밋으로 만듭니다.

manycodes 2023. 7. 15. 10:20
반응형

이전 커밋을 체크아웃하고 새 커밋으로 만듭니다.

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

반응형