簡體   English   中英

如何刪除git中的第一次提交?

[英]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/

您可以做的另一種方法是:

  1. 簽出到要保留的分支(例如dev) git checkout dev
  2. 現在,刪除要重置的git branch -D master
  3. 現在,創建一個具有相同名稱的空分支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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM