모든 커밋을 제거하기 위해 원격 Git 저장소를 재설정하는 방법은 무엇입니까?


164

모든 커밋을 제거하기 위해 원격 및 로컬 Git 저장소를 재설정하는 방법은 무엇입니까?

초기 커밋으로 현재 헤드로 새로 시작하고 싶습니다.



나는 체리 선택이나 다른 일을하고 싶지 않고 모든 변경 사항을 제거하고 공개 리포지토리도 재설정하고 싶습니다. 새로운 Git 사용자이므로 잘못된 커밋을했습니다. 공용 저장소도 있으므로 .GIT 디렉토리를 제거하는 것은 옵션이 아닙니다.
Priyank Bolia

강제 푸시도 수행 할 수 있으므로 .git 디렉토리를 제거하는 것이 실제로는 옵션입니다.
Lilith River

2
단지 nitpicking이지만 "개정"은 svn 용어이며 나무 모양의 역사에서는 그다지 의미가 없습니다.
Tamás Szelei

2
@ TamásSzelei "Revision"은 "commit"에 대한 동의어입니다. Pro Git 서적 (예 : here )과 Git 맨 페이지에서 모두 사용됩니다 .
jub0bs

답변:


348

완전히 재설정 하시겠습니까?

  1. .git디렉토리를 로컬로 삭제하십시오 .

  2. 자식 리포지토리를 다시 만듭니다.

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. 원격 서버로 푸시하고 덮어 씁니다. 이 일을하는 다른 모든 사람들을 엉망으로 만들 것임을 기억하십시오 ... 당신은 유일한 클라이언트가되는 것이 좋습니다.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    

1
그러나 커밋이 사라지고 저장소가 재설정됩니다. 파일 이름 앞에서도 이전 메시지를 제거 할 수 있습니까?
Priyank Bolia

2
GitHub에서 직접 원격 리포지토리를 제거하고 거기서 다시 만듭니다.
Bombe

1
자식 푸시 --force 대신 자식 푸시 -force이어야한다
윌리엄 Notowidagdo

6
"초기 커밋"에서 파일을 커밋하지 않으려면 파일을 추가 할 수 없으며 --allow-empty끝에 플래그를 추가하면 git commit -m 'Initial commit'됩니다.
raf

2
Git 2.3.2를 사용하여 사용해야했습니다. git push --force --set-upstream origin master그러나 나머지는 모두 설명 된대로 작동했습니다.
Sébastien Stormacq

6

먼저이 질문 의 지침에 따라 모든 것을 단일 커밋으로 스쿼시하십시오. 그런 다음 리모컨을 강제로 밀어 넣으십시오.

$ git push origin +master

그리고 선택적으로 다른 모든 브랜치를 로컬 및 원격으로 삭제하십시오.

$ git push origin :<branch>
$ git branch -d <branch>

0

나는 당신이 이런 식으로 할 것입니다 :

무엇이든하기 전에 사본을 보관하십시오 (미안보다 더 안전합니다)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

그런 다음 다른 분기를 삭제할 수 있습니다.

결과 : 커밋이 2 개 밖에없는 브랜치를 갖게됩니다.

git log --oneline최소한의 방법으로 커밋을 확인하고 커밋에 대한 SHA-1을 찾는 데 사용 하십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.