如何获取最新版本的代码?
Posted
技术标签:
【中文标题】如何获取最新版本的代码?【英文标题】:How do I get the latest version of my code? 【发布时间】:2011-09-14 04:59:41 【问题描述】:我正在使用 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'.
我已删除该工具所抱怨的文件的本地副本,但我仍然收到错误消息。
如何从远程存储库中检出最新版本?
【问题讨论】:
@Kzqai 下面的回答帮助了我:先尝试做git fetch
。我没有遇到冲突,但这是我获得最新版本代码的方式。
【参考方案1】:
要回答您的问题,只需两个步骤:-
-
使用
git pull
从您的 git 存储库中提取最新更改
使用git checkout -- .
清理具有未暂存更改的本地工作目录
.这将显示来自远程 git 存储库的本地存储库中的最新更改。清理所有本地未暂存的更改。
请注意git checkout -- .
将丢弃您在本地工作目录中的所有更改。如果您想放弃对选择性文件的任何更改,请使用git checkout -- <filename>
。如果您不想丢失未暂存的更改,请使用git stash
,因为它会清除所有未暂存更改的本地工作目录,并在您将来需要时保存。
【讨论】:
【参考方案2】:如果上述命令没有帮助您使用此方法:
-
转到您拥有 Fork 的 git 存档
单击设置> 向下滚动并单击删除此存储库
确认删除
再次fork,重新进入git clone
【讨论】:
【参考方案3】:如果您使用的是 Git GUI,请先获取然后合并。
通过远程菜单获取 >> 获取 >> 来源。 通过合并菜单合并>>合并本地。
出现以下对话框。
选择跟踪分支单选按钮(默认情况下也选中),将黄色框留空并按合并,这应该会更新文件。
在执行这些步骤之前,我已经恢复了一些本地更改,因为无论如何我都想丢弃这些更改,所以以后不必通过合并来消除。
【讨论】:
【参考方案4】:试试这个代码
cd /go/to/path
git pull origin master
【讨论】:
欢迎来到 ***!请考虑为您的解决方案添加一些解释,以更好地描述它如何解决问题。这将使您的答案更加有用【参考方案5】:如果您不关心任何本地更改(包括恰好在此处的未跟踪或生成的文件或子存储库)并且只想从存储库中获取副本:
git reset --hard HEAD
git clean -xffd
git pull
同样,这会破坏您在本地所做的任何更改,因此请谨慎使用。执行此操作时请考虑rm -Rf
。
【讨论】:
我尝试了这些命令,但仍然收到错误“冲突(内容):selenium/ant/build.xml 中的合并冲突”(以及其他)。我只想用 repo 中的内容覆盖我的文件的最新版本。我该怎么办??git clean -f
并不是答案的一部分。它将删除未保存在存储库中的文件(例如,在我的情况下,日志文件);你不需要这样做来让git pull
再次工作,只需git reset --hard HEAD
就足够了。
Esh,伙计,不要向 git 新手推荐少数删除命令之一。
@DarrenCook 我认为如果你想真正清理你的存储库,git clean -f
很重要。这相当于在 TFS 中执行“从文件夹中删除所有内容 -> 获取最新版本/获取特定”,就我而言,这就是我想要的。
@Darren 我认为 git clean -f`` 也很重要。我想获得最新版本,并且不想保留过时的缓存条目或其他不在 repo 上的生成资源。答案很清楚,它将删除本地更改并模仿 repo 中的最后一个版本,所以对我来说它看起来很完美。如果我真的需要在更新之间保留日志文件,我会将它们移动到其他地方。【参考方案6】:
通过运行此命令,您将获得最新的标签,通常是您项目的版本:
git describe --abbrev=0 --tags
【讨论】:
【参考方案7】:案例 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:关注本地变化
解决方案一:与新上线版本不冲突
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?
【讨论】:
@tvl.如何在不提交我的代码(有冲突)到分支的情况下获得最新更新..请帮助我 @user3354457 xm,有趣的问题。我以前从未尝试过,但您可以尝试并报告;)所以: - 使用更改制作补丁:git diff > uncommited-changes.patch - 重置分支 - 拉动更改 - 应用补丁 这个答案比已被接受为答案的答案值得更多的支持。 @James :) 很高兴我的回答对您有所帮助。提示,尝试编写文档,就像您对某个主题一无所知,并且详细程度肯定会帮助您。 git fetch 的最佳完整答案。这篇文章应该被锁定【参考方案8】:我怀疑发生的事情可能是您删除了您修改的文件(因为您不关心这些更改),现在 git 将删除视为更改。
这是一种将您的更改从工作副本中移出并放入“存储”的方法(如果您实际上再次需要它们,则可以检索),这样您就可以从上游提取最新的更改。
git stash
git pull
如果您想要检索您的文件(可能与上游更改和所有更改发生冲突),请运行 git stash apply
以将这些更改粘贴到您的代码之上。这样,您就有了一种“撤消”方法。
【讨论】:
我可能会推荐使用git stash pop
,除非你想知道你的 git stashes 的历史【参考方案9】:
我了解您想删除本地更改并删除遥控器上的内容?
如果所有其他方法都失败了,并且您(可以理解)害怕“重置”,最简单的方法就是将源克隆到新目录并丢弃旧目录。
【讨论】:
【参考方案10】:在我看来,您遇到了 core.autocrlf 问题。如果将 CRLF 换行符签入存储库,core.autocrlf=true 可能会出现您在 Windows 上描述的问题。尝试为存储库禁用 core.autocrlf,然后执行硬重置。
【讨论】:
【参考方案11】:如果您只想丢弃工作文件夹中的所有内容(例如,合并失败或中止的结果)并恢复到干净的先前提交,请执行git reset --hard
。
【讨论】:
【参考方案12】:您必须先合并您的文件。执行git status
以查看需要合并的文件(意味着您需要先解决冲突)。完成此操作后,请执行 git add file_merged
并再次执行 pull
。
【讨论】:
谢谢。我正面临这个问题。我的工作文件有一些更改,我不想提交。但在这种情况下我不能做 git pull 。所以我做 - git stash,git pull --rebase,git stash pop。然后手动合并和 git add file_merged以上是关于如何获取最新版本的代码?的主要内容,如果未能解决你的问题,请参考以下文章