从git获取一个干净的文件副本

时间:2014-03-09 12:29:33

标签: git svn tortoisegit

在svn中,有时我会删除一个本地文件,然后使用'svn update'来获得干净的副本。我怎么能在git中做到这一点? git pull / fetch不起作用。我想出的唯一方法是使用差异性的差异。谢谢。 我正在使用tortoiseGit。

2 个答案:

答案 0 :(得分:5)

文件在git和svn中以不同方式暂存和提交。与git的观点不同的要点是,使用git,文件通过名为 index 的暂存区域进行版本化,从那里它作为提交本地提交图的一部分< / em>您的分支指向,并且当您将分支推送到远程服务器时,它会从那里传播到提交的远程图

虽然承认“最新”有点误导,但为了简化,有四个“最新”文件版本:工作树中的一个,索引中的一个,本地分支中的一个和中的一个远程分支。本地和远程分支不一定是同步的。所以,当你说你想要一个干净的文件副本时,你必须先改进问题 - 然后回答你自己所追求的四个问题。

索引的最新版本:

$ git checkout -- /path/to/file

本地分支的最新版本(也会丢弃索引中的文件):

$ git checkout HEAD -- /path/to/file

来自远程分支的最新版本(作为本地计算机上的当前版本,可能是陈旧的):

$ git checkout origin/master -- /path/to/file

来自远程分支的最新版本(更新到最新的,酒吧竞争条件 - 不陈旧):

$ git fetch
$ git checkout origin/master -- /path/to/file

来自远程分支的最新版本(更新到最新版本,并与本地分支同步):

$ git pull
$ git checkout master -- /path/to/file

答案 1 :(得分:1)

尝试使用git checkout

git checkout <filename>

请注意,如果您处于合并 rebase 的中间,并且想要解决冲突 您需要添加--ours--theirs才能让git知道您想要的<filename>

e.g:

git checkout --ours <filename>

如果你想要一个文件名,因为它出现在历史的其他地方(或者出现在另一个分支上)

git checkout <branch-name or SHA> -- <filename>

注意--将git REF名称与文件名分开。