【问题标题】:git - get latest file after initially cloninggit - 最初克隆后获取最新文件
【发布时间】:2014-02-16 05:49:02
【问题描述】:

我对 Git 还很陌生,如果我听起来像个菜鸟,我深表歉意。

我最初运行了以下命令:

git clone https://github.com/userx/projecty.git

我一直在我的工作站上进行更改,但都没有上传。 github上有一个文件已经更新,我想同步到我的工作站:

https://github.com/userx/projecty/blob/master/whatever/whatever.py

我已在本地对其进行了一些修改,但它们可以/应该被覆盖。我只希望在我的工作站上刷新一个文件,而不触及我所做的任何其他事情。任何关于如何做到这一点的想法将不胜感激。

谢谢!

【问题讨论】:

  • 看起来你可以在这里做到这一点:stackoverflow.com/questions/16230838/… 你正在寻找的是拉单个文件,而不是克隆。
  • 您是否只是想获取该文件的最新内容,但作为本地修改(但未签入)文件?也许与其询问 git 操作的一些细节,不如让我们知道你想要完成什么。
  • 我在我的问题中添加了更多细节。现在更有意义了吗?
  • @dana,是的,我想是的,谢谢。看看我的回答,让我知道这是否符合您的要求。

标签: git


【解决方案1】:

假设您只想覆盖工作副本中该文件的内容(以便它在git status 的输出中显示为“已修改”,那么您可以这样做:

  1. 使用git fetch 更新本地存储库的远程跟踪分支。这不会修改任何本地分支,也不会修改您的工作副本:

    git fetch --all

  2. 使用git show从远程分支获取文件的副本,并通过重定向标准输出将其写入磁盘:

    git show origin/master:whatever/whatever.py > whatever/whatever.py

通过指定origin/master,您将从远程跟踪分支复制文件,这将是截至git fetch 时该文件的最新版本。您当然可以重定向标准输出以覆盖现有文件,如上所示,或将输出写入其他位置。

git show 命令也接受其他格式:请参阅man gitrevisions 中的“指定修订”。

请注意,正如@bluefeet 在他们的回答中所评论的那样,如果您将此文件提交到本地分支,并且您的本地分支打算稍后与远程 master 合并,那么您本地复制的 whatever/whatever.py 将发生冲突来自远程跟踪分支的更改。因此,一般来说,您只会将其作为测试某些东西的临时措施,或者如果您以后不打算将本地分支与远程 master 合并。

【讨论】:

  • 谢谢!我不确定您向我展示的内容是否是 hack,但它确实有效 :) 非常感谢!
  • 它并不是真正的 hack :) git 最强大的功能之一是远程跟踪分支,因为它使您可以随时访问远程存储库(或存储库)的状态。在此状态下,您可以在任何修订中显示单个文件或树,或合并更改,或任何您需要的。我认为对学习 git 的人最大的伤害之一是不教 git fetchgit merge 组合 beforegit pull (这是等效的),因为 git pull 掩盖了 git 如何使用远程跟踪分支.
【解决方案2】:

我建议这种方法:

# Undo your changes to whatever.py.
git checkout whatever/whatever.py

# Pack up all your other changes, saving them to a special stash area.
git stash

# Update your repo, getting the latest, including the latest whatever.py.
git pull

# Now restore you changes from the stash.
git stash pop

应该这样做,并让您处于良好的工作状态。

【讨论】:

  • 不,这也会更新遥控器上已更新的任何其他文件。
  • @Raman:是的,但是从字里行间看,我很确定这就是海报想要的。使用git show 提出的另一种解决方案会导致whatever.py 在git 中显示,就好像发帖人是对该文件进行所有更改的人一样,如果要提交,可能会导致非常困难的冲突。
  • 是的。我认为这不是 OP 想要的,但是如果本地 HEAD 未更新,您关于潜在的未来冲突的说明是一个很好的说明——我在答案中添加了一个关于它的附言。
猜你喜欢
  • 2021-10-23
  • 2018-02-08
  • 2012-09-30
  • 2014-12-09
  • 2014-07-16
  • 2012-05-25
  • 2018-10-14
  • 2018-09-10
  • 2011-05-04
相关资源
最近更新 更多