簡體   English   中英

硬復位后推 git 分支

[英]Pushing git branch after hard reset

我是 git 的初學者,所以請原諒我的愚蠢言論。

好的,所以我有一個本地分支,在那里我對某個提交進行了硬重置。 現在,當我執行git status時,它顯示 -

On branch product
Your branch is behind 'origin/product' by 3 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

這就是為什么我不能推送我的分支,因為我首先必須拉取更改。

現在,我確實明白為什么會發生這種情況,(因為硬重置會在該特定提交之后刪除所有 git 歷史記錄,並且遠程分支確實有這些提交,因此它告訴我原始/產品分支領先 3 個提交)(請如我錯了請糾正我)

那么如何推送硬重置所做的更改呢?

Git 嘗試在適用的情況下保留歷史記錄,因此在默認設置下,它不會在推送時“恢復”分支。

要使用本地分支的尖端(頭部)強制覆蓋遠程分支,傳統的方法是使用“強制推送”:

git push -f
git push --force  # Equivalent

但是,請注意,上述命令會將所有分支推送到“強制模式”。 如果您想通過只推送一個分支來更安全地執行此操作,請使用以下語法:

git push origin +master

加號表示“覆蓋”,並且當您指定分支名稱時,只有master將被強制推送。

這兩種方法都涵蓋了“還原”和“用不同的歷史覆蓋”兩種情況。


順便說一句,這種理解(部分)是錯誤的:

硬重置會刪除該特定提交后的所有 git 歷史記錄

硬重置不會從 Git 的本地存儲(即.git目錄)中刪除任何提交,而只會將您當前的分支(頭)指向目標提交,並檢查所有更改的文件。

在 GC 之前,您的提交將保留在 Git 存儲中。 驗證它們是否仍然存在(並且完好無損!)的最簡單方法是檢查git reflog的 output 。 如果需要,您還可以使用類似於git checkout/reset 'HEAD@{1}'命令來檢查它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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