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

时间:2011-06-13 20:04:27

标签: git

我正在使用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'.

我删除了该工具抱怨的文件的本地副本,但我仍然收到错误。如何查看远程仓库的最新版本? - 戴夫

12 个答案:

答案 0 :(得分:236)

如果您不关心任何本地更改(包括刚刚发生在这里的未跟踪或生成的文件或子存储库),只需要来自回购的副本:

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

同样,这将会破坏您在本地所做的任何更改,因此请谨慎使用。这样做时要考虑rm -Rf

答案 1 :(得分:193)

案例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?

答案 2 :(得分:17)

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

这是一种方法,可以将您的更改从您的工作副本移到&#34; stash&#34; (如果它实际上发现您再次需要它们,则可以检索),这样您就可以从上游获取最新的更改。

git stash  
git pull

如果您想要检索文件(可能与上游更改有冲突),请运行git stash apply将这些更改放在代码之上。这样,你有一个&#34;撤消&#34;方法

答案 3 :(得分:7)

您必须先合并文件。执行git status以查看需要合并的文件是什么(意味着您需要先解决冲突)。完成此操作后,请git add file_merged再次执行pull

答案 4 :(得分:2)

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

答案 5 :(得分:2)

试试这段代码

cd /go/to/path
git pull origin master

答案 6 :(得分:1)

我了解您想要删除本地更改并删除遥控器上的内容?

如果所有其他方法都失败了,如果你(完全可以理解)害怕“重置”,最简单的事情就是将原点克隆到一个新目录中并丢弃旧目录。

答案 7 :(得分:1)

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

git describe --abbrev=0 --tags

答案 8 :(得分:1)

要回答您的问题,只需两个步骤:-

  1. 使用 git pull
  2. 从您的 git 存储库中提取最新更改
  3. 使用 git checkout -- . 清理具有未暂存更改的本地工作目录 .这将显示来自远程 git 存储库的本地存储库中的最新更改。清除所有本地未暂存的更改。

请注意 git checkout -- . 将放弃您在本地工作目录中的所有更改。如果您想放弃选择性文件的任何更改,请使用 git checkout -- <filename>。如果您不想丢失未暂存的更改,请使用 git stash,因为它会清除本地工作目录中所有未暂存的更改,同时在将来需要时保存它。

答案 9 :(得分:0)

听起来像你有core.autocrlf问题。如果将CRLF换行符检入存储库,core.autocrlf = true可能会出现您在Windows上描述的问题。尝试禁用存储库的core.autocrlf,然后执行硬重置。

答案 10 :(得分:0)

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

通过“远程”菜单>>“提取” >>“来源”进行提取。 通过“合并”菜单>>“合并本地”。

出现以下对话框。

enter image description here

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

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

答案 11 :(得分:0)

如果上述命令不能帮助您使用此方法:

  1. 转到您拥有Fork的git存档
  2. 单击“设置”>向下滚动并单击“删除此存储库”
  3. 确认删除
  4. 再次分叉,然后重新输入git clone
  5. 您已经拥有最新版本