2011-06-13 139 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

相关问题