git에서 첫 번째 커밋을 제거하는 방법이 궁금합니다.
커밋하기 전에 개정 된 내용은 무엇입니까? 이 개정판에 이름이나 태그가 있습니까?
git rebase -i --root. 자세한 내용은 다음 SO 답변을 참조하십시오. stackoverflow.com/questions/2246208/…
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
git에서 첫 번째 커밋을 제거하는 방법이 궁금합니다.
커밋하기 전에 개정 된 내용은 무엇입니까? 이 개정판에 이름이나 태그가 있습니까?
git rebase -i --root. 자세한 내용은 다음 SO 답변을 참조하십시오. stackoverflow.com/questions/2246208/…
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
답변:
나에게 가장 안전한 방법은 다음 update-ref명령 을 사용하는 것입니다 .
git update-ref -d HEAD
명명 된 참조를 삭제 HEAD하므로 현재 분기의 모든 커밋 이 재설정됩니다 (부드럽게 작업을 잃지 않습니다) .
원하는 것은 첫 번째 커밋을 두 번째 커밋과 병합하는 것입니다 rebase.
git rebase -i --root
마지막 방법은 컨텐츠가 동일하지만 커밋 히스토리가없는 분기 인 고아 브랜치를 작성하고 새 컨텐츠를 커미트하는 것입니다.
git checkout --orphan <new-branch-name>
모든 커밋이 부모 커밋을 참조하기 때문에 첫 번째 커밋 전에는 아무것도 없습니다. 이렇게하면 첫 번째 커밋이 특별 해 지므로 (고아 커밋) 이전 "상태"를 참조 할 방법이 없습니다.
커밋을 수정하려면 간단히 git commit --amend다음을 수행하십시오. 다른 커밋을 만들지 않고 커밋을 수정합니다.
모든 것을 다시 시작하려면 .git리포지토리를 삭제하고git init
--amend또한 그것이 처음에 잘못 된 제대로 경우 저자를 업데이트하지 않습니다. 그것이 내가 필요한 것이므로 받아 들인 대답을 사용하고 대신 새로운 커밋을했습니다.
# Check out to a temporary branch:
git checkout --orphan TEMP_BRANCH
# Add all the files:
git add -A
# Commit the changes:
git commit -am "Initial commit"
# Delete the old branch:
git branch -D master
# Rename the temporary branch to master:
git branch -m master
# Finally, force update to our repository:
git push -f origin master
git repo에 항상 첫 번째 커밋이 있기 때문에 첫 번째 커밋을 편집하고 싶을 수도 있습니다. git commit --amend --reset-author평소 대신 사용 을 고려하십시오 git commit --amend.
나는 결코 일어나지 않은 것처럼 리포지토리에서 모든 자식 커밋을 취소하는 방법을 찾고있었습니다.
리베이스는 한 지점까지 작동합니다. 그러나 첫 번째 (시간순으로 가장 오래된 git commit)는 부모가 없기 때문에 항상 문제가 될 것이므로 오류가 발생합니다.
이 답변들 중 어느 것도 나를 위해 그것을 해결하지 못했습니다. 그러나 많은 수색과 시행 착오 끝에 이것이 효과가 있음을 알았습니다!
git update-ref -d HEAD
git push origin master -f
이것이 도움이되기를 바랍니다. 좋은 하루 보내세요
당신이 할 수있는 또 다른 방법은 다음과 같습니다
git checkout devgit branch -D mastergit checkout --orphan master물론,이 모든 것은 사용 사례에 따라 다르지만 분기가 둘 이상인 경우 .git디렉토리를 삭제하는 것은 의미가 없습니다.
다른 브랜치를 유지하고 싶지만 예를 들어 다른 브랜치에 대한 master공통 히스토리없이 브랜치를 새로 시작 하게하려면 이를 수행하는 한 가지 안전한 방법은 새 저장소를 작성하고 이전 저장소에서 해당 컨텐츠를 푸시하는 것입니다.
cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster
이렇게하면 newmaster이전 리포지토리에 분기가 만들어 지고 다른 분기와 공통되지 않은 기록이 있습니다. 물론, 당신은 단지를 덮어 쓸 수 있습니다 master와 함께뿐만 아니라 git push -f.
모든 브랜치와 모든 기존 컨텐츠를 삭제하려면 다음을 실행하십시오.
rm -rf .git/
git rebase --root아마 OP가 원했던 것에 동의 하지만이 답변에 두 개의 공감대 가 있다고 생각하면 누군가가 여전히 관련성을 발견하면 삭제하지 않는 것이 좋습니다.
방금 커밋했지만 푸시하지 않은 경우 .git 디렉토리를 제거 하고 git init다시 ...
질문에 대한 답변은 다음 여부에 따라 다릅니다.
분기에서 첫 번째 만 커밋을 제거하려고합니다 (다른 분기를 그대로 두는 동안).
후속 커밋 (및 다른 분기)을 '제자리에두고'있는 동안 일부 브랜치에서 첫 번째 커밋을 제거하려고합니다.
이 중 두 번째는 비교적 간단합니다. 본질적으로 루트에 기반을 두어야합니다. 여기에있는 대부분의 답변은이를 수행하는 방법에 대한 것입니다.
두 번째를 수행하는 것은 (첫 번째 지점을 제거하고 다른 지점을 내버려두고 지점에서만 커밋하는 것) 더 어렵습니다. 또는 GitHub 또는 Bitbucket에 변경 사항이 반영되기를 원할 경우 특히 어렵습니다. Git에는 커밋없이 분기를 푸시하거나 강제로 푸시 할 수있는 방법이 없습니다. 그리고 GitHub 또는 Bitbucket에서 커밋이없는 새로운 빈 분기를 만들 수있는 방법이 없습니다 (다시 볼 수있는 한). 따라서 완전히 빈 분기를 만들려면 기본적으로 새 리포지토리를 만든 다음 @ user1338062의 답변에 따라 원하는 커밋을 포함하여 원하는 분기를 다시 추가해야합니다.
필요가 취해야 할 것이 두 가지 방법이 있다는 것을, 두 개의 서로 다른 (더 많거나 적은 합리적인) 시나리오 - 나는 분명되지 않았 어떤이 응답 관계를 설명하겠습니다 그래서 모두 당신이 할 수 있도록 할 수 있습니다 일들이 순서를 OP가 요구하는 것을 완전히 마스터합니다.