簡體   English   中英

進行git pull時如何強制更新?

[英]How to force update when doing git pull?

我正在做一個開源庫的git pull,我不在乎我的本地副本是什么,我只想用原始版本更新它。

即它可以吹走我的本地更改。

這應該可以解決問題:

git reset --hard HEAD
git pull
git fetch
git checkout origin/name_of_branch  # correct state but in 'head without a name'
git checkout -B name_of_branch      # overwrite current tree onto name_of_branch

這會將遠程跟蹤分支簽入沒有名稱的頭部,然后您可以看一下並檢查自己是否滿意。 每當您想要(即使在更改或提交之后)第二次git checkout都將當前樹標記為“ name_of_branch”,即使這樣做必須刪除舊的name_of_branch。


編輯:“多么瘋狂的命令行語法”

git命令的語法似乎不直觀。 實際上,這是不直觀的Git數據模型。 這不是一個糟糕的設計,但是因為它可以處理文件,分支,提交,並且比其他版本控制系統更加靈活和強大。 一旦掌握了這些東西在Git中的工作原理,命令行就會很有意義,並且您將能夠准確地猜測如何做復雜的事情。

  • git fetch這將獲取自上次以來origin服務器上發生的所有更新。 Git將從服務器的獲取中分離出任何分支的更新,合並等 所有所謂的分支origin/XXX是服務器上什么是你的最新版本。 它們不是遠程分支,而是遠程跟蹤分支 ,即跟蹤遠程分支的本地分支。 進行git fetch ,無需觸摸任何分支即可更新它們。 當您執行git mergegit rebase等時,您將使用獲取的版本, 而不會從服務器獲取更新的副本。 這意味着您可以控制何時發出網絡請求(如果您並不總是連接到服務器),並且可以“獲取”服務器的快照,然后隨意合並。 如有疑問,請先執行git fetch
  • git checkout origin/name_of_branch git checkout做兩件事。 它將文件更新到該分支,並將HEAD設置到該分支。 文件是您所期望的。 HEAD表示您提交時,它們將添加到HEAD指向的分支的末尾。 IOW, checkout輸出 -編寫正確的文件版本,並准備輸入 -准備將要執行的提交存儲在正確的位置。 如果簽出名為foo的分支,則樹將更改為foo保存的狀態, 並且您所做的下一個提交將添加到foo origin\\xyz的情況下,您不能將更改寫入origin分支-這些跟蹤origin服務器上的內容並且不能直接提交。 因此,檢出將更新文件,並將HEAD設置為空-一個未命名的分支。 這可以防止您不小心將新簽出的內容提交回所使用的上一個分支,並且實際上,git完全不鼓勵您進行提交,直到擁有目標分支為止。
  • git checkout -B name_of_branch像往常一樣, 當git用一個命令執行兩項不同的操作時,可以分別配置它們 因此, checkout操作的第二部分,將HEAD設置為您要提交的分支,可以使用新的分支,而不是要簽出的分支(如果使用-B選項)。 所以git checkout -B new_stuff old_stuff會將所有文件設置為old_stuff的狀態,但是讓您准備將提交寫入新分支new_stuff 這是一項常見的任務,分兩步為您節省了簽出分支然后將其分叉的麻煩。 現在, 幾乎可以忽略git命令的所有參數,而git將做最明顯的事情 在這種情況下,就是根據您所在的分支而不是您要簽出的分支創建一個新分支。 因此git接受了您所在的未命名分支,並創建了一個名為name_of_branch的新分支,您可以開始提交該分支。 請注意,大寫字母“ B”的意思是“強制”。 如果使用“ -b”,則git將拒絕覆蓋已經存在的分支。 使用“ -B”,它將繼續進行而不會發出警告或確認。

去到, 下意識的 ,解決方法是: git reset --hard origin/master

對於專家和初學者來說,這都是一種萬能的解決方案,可以迅速完成工作。 盡管在未發出警告的情況下吹走了所有未提交的更改。

更安全的命令鍵入起來有點git checkout -B master origin/mastergit checkout -B master origin/master

輸入別名:

git config --global alias.become '!git checkout -B "$(git symbolic-ref --short HEAD)"'

此后,可以輸入: git become origin/master

暫無
暫無

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

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