[英]How to remove the first commit in git?
我很好奇如何刪除git中的第一次提交。
提交任何內容之前的修訂版本是什么? 該修訂版是否有名稱或標簽?
對我來說,最安全的方法是使用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
制作另一個
# 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
。
如果要保留其他分支,例如,使master
分支重新啟動而沒有其他分支的共同歷史記錄,那么一種安全的方法是創建一個新的存儲庫,並將其內容推送到舊的存儲庫中:
cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster
這將在舊存儲庫中創建newmaster
分支,其歷史記錄與其他分支都不相同。 當然,您也可以使用git push -f
覆蓋master
。
如果要銷毀所有分支和所有現有內容,則只需運行
rm -rf .git/
您可以做的另一種方法是:
git checkout dev
git branch -D master
git checkout --orphan master
當然,所有這些都取決於您的用例,但是如果您有多個分支,則刪除.git
目錄是沒有意義的。
如果您剛剛提交但未推送,則只需刪除.git目錄並再次執行git init
...
問題的答案取決於是否:
您要刪除分支上的第一個且僅提交(僅保留其他分支不變),或者
您要刪除某個分支上的第一個提交,同時“保留”后續的提交(和其他分支)。
第二個相對簡單。 從本質上講,您必須扎根-多數答案都與執行此操作的方法有關。
進行第二個操作(從一個分支中刪除第一個並且是唯一的提交,而讓其他分支保持獨立)更加困難。 或者,至少,如果您希望它發生並且使更改反映回GitHub或Bitbucket,則尤其困難。 (據我所知)Git中根本沒有辦法推送或強制推送沒有提交的分支。 而且(據我所知)根本沒有辦法在GitHub或Bitbucket中創建沒有提交的新的空分支。 因此,您基本上必須創建一個新的存儲庫才能創建一個完全空的分支,然后根據@ user1338062的答案重新添加所需的分支(包括所需的提交)。
因此,我希望這個答案可以澄清可能不太明顯的問題-對於兩種不同(或多或少合理)的場景,需要采取兩種不同的方法,這兩種方法都是您可能想要做的,以便完全掌握OP的要求。
我一直在尋找一種方法來撤消回購中的所有git提交,就像它們從未發生過一樣。
變基將達到一定程度。 但是,第一個(按時間順序最早的git commit)總是會出現問題,因為它沒有父項,因此會出錯。
這些答案都沒有為我解決。 但是經過大量搜索和反復試驗后,我發現它可以正常工作!
git update-ref -d HEAD
git push origin master -f
希望這對您有所幫助。 祝你有美好的一天。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.