git:如何获取最新版本的代码?


200

我正在使用Git 1.7.4.1。我想从存储库中获取最新版本的代码,但出现错误...

$ 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在下面的回答对我有所帮助:尝试先做git fetch。我没有遇到冲突,但是这是我获得最新版本代码的方式。
克里斯·K

Answers:


258

如果您不关心任何本地更改(包括恰好在这里的未跟踪或生成的文件或子存储库),而只想从存储库中获取副本:

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

同样,这会否定您在本地所做的任何更改,因此请谨慎使用。考虑一下rm -Rf这样做。


1
我尝试了这些命令,但仍然收到错误“ CONFLICT(内容):在selenium / ant / build.xml中合并冲突”(以及其他错误)。我只想用回购中的内容覆盖文件的最新版本。我能做什么??
戴夫

31
git clean -f并不是答案的一部分。它将删除未保留在资源库中的文件(例如,在我的情况下,为日志文件);您无需执行此操作即可重新git pull工作,就git reset --hard HEAD足够了。
达伦·库克

12
天哪,伙计,不建议对git newbies删除命令之一。
2013年

6
@DarrenCook我认为,git clean -f如果您要真正清理存储库,那么这很重要。这相当于在TFS中执行“从文件夹中删除所有文件->获取最新版本/获取特定文件”,就我而言,这就是我想要的。
RPDeshaies 2015年

3
@Darren我认为git clean -f``也很重要。我想获取最新版本,并且不想保留过时的缓存条目或其他不在仓库中的生成资源。答案很明确,那就是它将删除本地更改并模仿仓库中的最新版本,因此对我来说看起来很完美。如果确实需要在更新之间保留日志文件,则将其移至其他位置。
Balmipour

231

情况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.
    

更多信息: 如何使用'git reset --hard HEAD'恢复到以前的提交?


@tvl。如何在不提交代码(有冲突)的情况下获取最新更新。.请帮助我
user3354457 2015年

@ user3354457 xm,有趣的问题。我之前从未尝试过,但是您可以尝试并向其报告;)所以:-使用更改制作补丁:git diff> uncommited-changes.patch-重置分支-拉出更改-应用补丁
tvl

3
这个答案比已经被接受为答案的投票更具吸引力。
詹姆斯,

@James :)很高兴我的回答对您有所帮助。提示,尝试编写文档,就像您对某个主题一无所知一样,绝对的冗长性会帮助您。
电视

4
git fetch的最佳完整答案。此职位应锁定
Callat

17

我怀疑发生的事情可能是您删除了修改的文件(因为您不关心那些更改),而现在git将删除视为更改。

这是将您的更改从工作副本移到“存储”中的一种方法(如果实际上确实需要再次使用,则可以检索),因此您可以从上游提取最新的更改。

git stash  
git pull

如果您要检索文件(与上游更改及所有内容潜在冲突),请运行a git stash apply将这些更改粘贴在代码之上。这样,您就可以采用“撤消”方法。


1
我可能会建议使用,git stash pop除非您想要git存储的历史记录
Rapnar 2014年

7

您必须先合并文件。进行操作git status以查看需要合并的文件是什么(意味着您需要首先解决冲突)。一旦这样做了,做git add file_merged和你做pull一次。


2
谢谢。我正面临这个问题。我的工作文件中有一些更改,我不想提交。但是在这种情况下,我无法进行git pull。所以我做-git stash,git pull --rebase,git stash pop。然后手动合并并git添加file_merged
RuntimeException

6

试试这个代码

cd /go/to/path
git pull origin master

5
欢迎来到Stackoverflow!请考虑在解决方案中添加一些说明,以更好地描述其解决问题的方式。这将使您的答案更加有用
dkackman

2

如果您只想丢弃工作文件夹中的所有内容(例如,合并失败或中止的结果)并恢复为干净的先前提交,请执行git reset --hard


1

我了解您想破坏本地更改并删除远程设备上的内容?

如果所有其他方法都失败了,并且您(可以理解)害怕“重置”,那么最简单的方法就是将源克隆到一个新目录中,并丢弃旧目录。


1

通过运行此命令,您将获得通常是项目版本的最新标签:

git describe --abbrev=0 --tags

0

在我看来,您好像遇到了core.autocrlf问题。如果将CRLF换行符检入到存储库中,那么core.autocrlf = true可能会出现类似您在Windows中描述的问题。尝试为存储库禁用core.autocrlf,然后执行硬重置。


0

如果您使用的是Git GUI,请先获取然后合并。

通过远程菜单>>提取>>原始获取。通过“合并”菜单>>“合并本地”。

出现以下对话框。

在此处输入图片说明

选择跟踪分支单选按钮(默认情况下也是选中的),将黄色框保留为空,然后按合并,这将更新文件。

在执行这些步骤之前,我已经还原了一些本地更改,因为无论如何我都希望丢弃这些更改,因此以后不必通过合并消除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.