[英]git pull failing to pull changes from remote
據我了解,origin / master和origin / HEAD在遠程存儲庫中,而master在本地計算機上。 更改(由我從另一台計算機推送到存儲庫)創建了提交0e17adc。 現在,我想將該更改帶入本地存儲庫。 我認為正確的方法是:
git checkout master
git pull
但是,這返回:
Already up-to-date.
為什么會發生這種情況? 在我看來master似乎與origin / master不同步,我以為git pull
進行git fetch
,然后git merge
所以應該將origin / master與master合並嗎?
據我了解,origin / master和origin / HEAD在遠程存儲庫中,而master在本地計算機上。
這在細節上並不太正確(細節很重要),但有一個正確的想法來支持: origin/master
在您的本地計算機中,但這是Git 記住您的Git從其(原始)Git得到的東西的方式。 當您運行git fetch
(或進行git pull
運行git fetch
)時,您的Git會在您的Git所存儲的URL以及名稱origin
調用其Git。 他們的Git列出了他們的master
及其提交哈希ID,而您的Git則確保您具有所需的提交,然后設置自己的origin/master
來記住他們的master
。
現在,我想將該更改帶入本地存儲庫。 我認為正確的方法是:
git checkout master git pull
那是人們通常這樣做的一種方式。 (我更喜歡避免git pull
me和打破單獨的命令。)
但是,這返回:
Already up-to-date.
如果運行git branch -vv
(兩次詳細:非常冗長),您應該會看到類似的內容,但有所不同(這在Git的Git存儲庫中):
* master 5be1f00a9 [origin/master] First batch after 2.16
在方括號這里,事情origin/master
,是當前上游設置master
。 每個分支可以有一個(只有一個)上游,您可以使用git branch --set-upstream-to
。
當您運行git pull
(或像我一樣將其分解為組件)時,Git:
git fetch
:另一個從默認位置獲取到當前分支上游上游遠程站點的Git,在這種情況下,它是origin/master
的origin
部分; 然后 git merge
:該命令的參數取決於您的Git從另一個Git得到的內容以及上游設置的其余部分。 同樣,如果某些設置被嚴重破壞,還有很多細節可能很重要,但是總之,如果git branch -vv
origin/master
顯示為上游,則:
git fetch origin
git merge origin/master
應該執行的,當你運行了什么情況的相當於git pull
......這不應該導致git log
你是顯示在圖像輸出。 因此,在這一點上,我最好的猜測是master
的上游設置不正確。
您可以運行git branch -vv
來查看它,或使用:
$ git rev-parse --symbolic-full-name "master@{upstream}"
在我的情況下打印:
refs/remotes/origin/master
(我將引號括在master@{upstream}
上面,因為某些命令行解釋器有時會使用不帶括號的大括號來做有趣的事情,但是大多數時候您不需要這樣做)。
如果上游是錯誤的,並且您是master
並且想要修復它,請運行:
git branch --set-upstream-to=origin/master
假設添加--set-upstream-to
時,您的Git版本至少為1.8.0。 在較舊的Git中,您可以使用:
git config branch.master.remote origin
git config branch.master.merge master
( git branch --set-upstream
命令,請注意這里最后沒有-to
,很難正確使用;避免使用它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.