2011-06-13 130 views
144

我使用的是Git 1.7.4.1。我想獲得最新版本的從存儲庫中我的代碼,但我得到錯誤...git:我如何獲得我的代碼的最新版本?

$ git pull 
…. 
M selenium/ant/build.properties 
…. 
M selenium/scripts/linux/get_latest_updates.sh 
M selenium/scripts/windows/start-selenium.bat 
Pull is not possible because you have unmerged files. 
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'. 

我已經刪除了該工具抱怨文件的本地副本,但我仍然得到錯誤。如何從遠程回購中檢出最新版本? - 戴夫

+1

@ Kzqai的回答下面幫我:嘗試只是在做'混帳fetch'第一。我沒有發生衝突,但是我得到了最新版本的代碼。 – 2013-09-11 21:48:33

回答

7

你必須先合併你的文件。執行git status以查看需要合併的文件(意味着您需要首先解決衝突)。完成此操作後,請執行git add file_merged並再次執行您的pull

+2

謝謝。我正面臨着這個問題。我的工作文件有一些變化,我不想提交。但在這種情況下,我不能做一個混帳。所以我做 - git藏起來,git pull --rebase,git stash pop。然後手動合併和git添加file_merged – RuntimeException 2012-11-01 14:21:39

192

如果你不關心任何地方的變化(包括未跟蹤或生成的文件或subrepositories恰好就在這裏),只是想從回購副本:

git reset --hard HEAD 
git clean -xffd 
git pull 

同樣,這將核彈您在本地進行的任何更改都要謹慎使用。這樣做時請考慮rm -Rf

+1

我試過這些命令,仍然收到錯誤,「CONFLICT(內容):在selenium/ant/build.xml中合併衝突」(等等)。我只想用回購中的內容覆蓋我的文件的最新版本。我能做什麼?? – Dave 2011-06-13 20:33:29

+19

'git clean -f'實際上並不是答案的一部分。它會刪除未保存在存儲庫中的文件(例如在我的情況下,日誌文件);你不需要這樣做來讓'git pull'再次運行,只需'git reset --hard HEAD'就足夠了。 – 2012-02-24 03:35:01

+0

@Dave如果和我一樣,你已經在本地版本中做了一個提交(例如,在一次失敗的嘗試中讓git開心,所以'git pull'會起作用!!),並且你很樂意拋棄該本地提交,然後使用'git log'來發現之前提交的id,然後在調用'git reset --hard HEAD'時使用它來代替HEAD。例如。 'git reset --hard a12312' – 2012-02-24 03:37:59

2

如果你只是想扔掉工作文件夾中的所有東西(例如失敗或中止合併的結果)並恢復爲乾淨的以前的提交,請執行git reset --hard

0

這聽起來像你有core.autocrlf問題。如果將CRLF換行符簽入到存儲庫中,core.autocrlf = true可能會給出您在Windows上描述的問題。嘗試禁用存儲庫的core.autocrlf,並執行硬重置。

1

我知道你想垃圾你的本地變化,並拉下你的遙控器上的東西?

如果一切都失敗了,如果你(很可以理解)害怕「重置」,最簡單的事情就是將原點克隆到一個新的目錄中,並將舊的目錄廢棄。

16

我懷疑發生了什麼事情可能是因爲您刪除了您修改的文件(因爲您不關心這些更改),現在git正在將刪除作爲更改。

這是一種將您的更改從工作副本中移出並存入「存儲器」(如果事實證明您再次需要這些存儲器,則可以進行檢索),因此您可以從上游獲取最新的更改。

git stash 
git pull 

如果你想檢索您的文件(與上游的變化和所有潛在的衝突),運行git stash apply粘在你的代碼的頂部這些變化。這樣,你有一個「撤消」的方法。

+0

我可能會推薦使用'git stash pop',除非你想要你的git的存檔記錄 – Rapnar 2014-11-18 21:18:41

150

案例1:不要在乎局部變化

  • 解決方法1:獲取最新的代碼,並重置密碼

    git fetch origin 
    git reset --hard origin/[tag/branch/commit-id usually: master] 
    
  • 解決方案2:刪除文件夾並再次克隆:D

    rm -rf [project_folder] 
    git clone [remote_repo] 
    

案例2:護理有關的局部變化

  • 解決方案1:

    :用新的在線版

    git fetch origin 
    git status 
    

    將報告像沒有衝突

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. 
    

    然後獲取最新版本

    git pull 
    
  • 解決方法2:用新的在線版

    git fetch origin 
    git status 
    

    將報告類似衝突:

    error: Your local changes to the following files would be overwritten by merge: 
        file_name 
    Please, commit your changes or stash them before you can merge. 
    Aborting 
    

    提交你的本地修改

    git add . 
    git commit -m ‘Commit msg’ 
    

    設法得到改變(失敗)

    git pull 
    

    將報告是這樣的:

    Pull is not possible because you have unmerged files. 
    Please, fix them up in the work tree, and then use 'git add/rm <file>' 
    as appropriate to mark resolution, or use 'git commit -a'. 
    

    打開衝突文件並解決衝突。然後:

    git add . 
    git commit -m ‘Fix conflicts’ 
    git pull 
    

    將報告是這樣的:

    Already up-to-date. 
    

更多信息: How do I use 'git reset --hard HEAD' to revert to a previous commit?

+0

@ tvl.How我可以得到最新的更新而不需要提交我的代碼(有衝突)來分支。請幫助我 – user3354457 2015-07-10 06:42:45

+0

@ user3354457 xm ,有趣的問題。我從來沒有嘗試過,但你可以嘗試並報告回來;)所以: - 做一個補丁的變化:git diff> uncommited-changes.patch - 重置分支 - 拉動更改 - 應用補丁 – tvl 2015-07-10 10:03:20

+1

這個答案值得遠遠多於已被接受爲答案的答案。 – James 2016-07-13 08:56:10

1

通過運行這個命令,你會得到最新的標籤,通常是版本您的項目:

git describe --abbrev=0 --tags 
0

試試這個代碼

cd /go/to/path 
git pull origin master 
+1

歡迎來到Stackoverflow!請考慮在解決方案中添加一些解釋以更好地描述它是如何解決問題的。這會讓你的答案更加有用 – dkackman 2017-12-09 13:12:55

相關問題