2013-04-18 64 views
1

一位朋友做了「git reset --hard origin」,之後推動了他的改變。他這樣做,而不是去「git reset --hard origin/branch_name」,這是他的實際意圖。「git reset --hard origin」實際上做了什麼?

我認爲所有「git reset --hard origin」都會重置您的分支以完全匹配所有相關的遠程分支。然而,在他推送之後,我做了一個「git pull origin branch_name」,由於某種未知的原因,我拉了一大堆似乎來自主服務器的新文件(例如,如果有主合併)。但是在本地和遠程日誌中,我們從來沒有看到這些文件被提交,或者從主服務器到我們分支的任何合併,我們只知道這個問題是在推後發生的,並且不知道實際發生了什麼。

回答

1

它似乎將當前分支重置爲默認(即通常爲主)origin分支的狀態。

+0

我傾向於不同意:'git reset'沒有達到遠程,它只是使用定義的規則集解析被解析的修訂版本的名稱(請參閱我的答案)。在完成'git fetch origin'後,只會有一堆以'.git/refs/remotes/origin'命名的參考文件,以該遠程分支命名,沒有'HEAD'或類似的東西。因此,在本地我們並不知道什麼是當前默認的「origin」分支。 – kostix

0

這是一個有趣的問題......該gitrevisions manual page正式介紹這(在<refname>情況下,沒有點5),但沒有說明如果<refname>解決這樣到底發生了什麼。

我試圖做git rev-parse origin和Git告訴我這個修訂是不明確的(即沒有找到),我確實有refs/remotes/origin在我用於測試的回購。

在啓用了命令執行跟蹤(環境中的GIT_TRACE=1)的同一回購中嘗試git reset --hard origin可解決git rev-parse的同一故障。

因此我拿到這個是你的同事(據說誤)有一個真正的本地分支或一個名爲「起源」的標籤,所以git reset --hard origin他們當前已簽出分支實際上重置尖端提交當地分公司「原產地」

我現在通過在回購中運行git branch -agit tag來檢查這個假設。

+0

謝謝。我被告知實際上沒有在本地稱爲「原產地」的分支。它不是一個遠程分支,如果它在本地被刪除將很難知道。然而,主要問題仍然存在,那就是一堆新文件被拉下來似乎來自主人進入我們的分支,而且沒有合併。有趣的是,這個問題發生在着名的「git reset --hard origin」和他提交的幾個文件之後。可能與問題完全無關,但這是我們唯一的線索。 – CCC

+0

我在本地嘗試了一下,並得到了這個「git status」:#在分支上my_branch #你的分支和'origin/my_branch'有分歧, #分別有145和288個不同的提交。似乎畢竟重設當前分支掌握 – CCC

+0

@CarlosP,好吧,然後我會建議在主Git郵件列表上查詢這個問題(請參閱[this](http://git-scm.com/community))這整個線程與「看起來」 - 「我想」 - 成熟,並且獲得專家意見會很好。 – kostix

相關問題