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


git: How do I get the latest version of my code?

我使用的是Git 1.7.4.1。我想从存储库中获取我的代码的最新版本,但我遇到了错误…

1
2
3
4
5
6
7
8
$ 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'.

我已经删除了该工具抱怨的文件的本地副本,但我仍然收到错误。如何从远程回购中签出最新版本?-戴夫


如果您不关心任何本地更改(包括未跟踪或生成的文件或子目录,而这些文件或子目录恰好就在这里),只想从repo中得到一个副本:

1
2
3
git reset --hard HEAD
git clean -xffd
git pull

同样,这会使您在本地所做的任何更改成为核弹,因此请小心使用。做这件事的时候,想想rm -Rf


案例1:不关心局部变化

  • 解决方案1:获取最新代码并重置代码

    1
    2
    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
  • 解决方案2:删除文件夹并再次克隆:d

    1
    2
    rm -rf [project_folder]
    git clone [remote_repo]

案例2:关注局部变化

  • 解决方案1:与新的联机版本没有冲突

    1
    2
    git fetch origin
    git status

    将报告如下内容:

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

    然后获取最新版本

    1
    git pull

  • 解决方案2:与新的联机版本冲突

    1
    2
    git fetch origin
    git status

    将报告如下内容:

    1
    2
    3
    4
    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

    提交本地更改

    1
    2
    git add .
    git commit -m ‘Commit msg’

    尝试获取更改(将失败)

    1
    git pull

    将报告如下内容:

    1
    2
    3
    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
    2
    3
    git add .
    git commit -m ‘Fix conflicts’
    git pull

    将报告如下内容:

    1
    Already up-to-date.

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


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

这里有一种方法可以将您的更改从工作副本中移到"存储"(如果事实证明您曾经再次需要这些更改,则可检索),这样您就可以将最新的更改从上游拉下来。

1
2
git stash  
git pull

如果您想要检索您的文件(可能与上游更改和所有更改发生冲突),请运行git stash apply将这些更改粘贴到代码之上。这样,您就有了一个"撤消"方法。


你必须先合并你的文件。执行git status查看需要合并的文件是什么(意味着您需要首先解决冲突)。完成后,再做一次git add file_mergedpull


尝试此代码

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


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


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

1
git describe --abbrev=0 --tags


我知道你想把你的本地变化弄得一团糟,然后把遥控器上的东西拉下来?

如果所有其他方法都失败了,如果你(很容易理解)害怕"重置",那么最简单的方法就是将源复制到一个新目录中,然后丢弃旧目录。


我觉得你好像有核心问题。汽车问题。core.autocrlf=true可以给出与您在Windows上描述的问题类似的问题,如果将crlf新行签入存储库。尝试为存储库禁用core.autocrlf,然后执行硬重置。