在svn中,有时我会删除一个本地文件,然后使用'svn update'来获得干净的副本。我怎么能在git中做到这一点? git pull / fetch不起作用。我想出的唯一方法是使用差异性的差异。谢谢。 我正在使用tortoiseGit。
答案 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名称与文件名分开。