2011-08-18 47 views
4

这是一个文件,我可能在我的分支中意外更改了一个文件,我已经承诺并重新进行了多次修改。在我将这个分支交给其他人之前,我想让git忘记我曾经为这个文件做过任何事情。让git忘记我对文件做了任何事

如何让git从master分支(其他人已更新)获取该文件的最新版本,并忘记我的分支曾经触及该文件的事实?

回答

1

从主人签出文件以覆盖您的更改可能是最容易的。在提交刚签出的文件后,您可能希望重新分割/压缩分支以删除对该文件所做的任何提交。语法结帐是:

git checkout origin/master <path_to_file> 

更高级的选项可能是使用git-filter-branch

3

当你的一个分支,可以从master签文件:

git checkout master the_file 

提交这一变化然后找到你意外更改文件的提交sha1。并使用

git rebase -i that_sha1 

您会看到分支中的提交列表,从最旧到最新。在第一行(不正确的提交)之后移动最后一行(您刚完成的修复提交)并将pick更改为fixup。这将和修改不正确的提交具有相同的效果,然后在其上重新提交其余的提交。

这一切都假定你没有发布你的分支。如果你这样做了,现在也有其他人也有,那你就麻烦了。

+0

这个答案绝对似乎更正确,但肖恩的一个是很多简单(对于git noob),似乎已经为我完成了这项工作(git diff --name-only'ing against master does not show the因为你似乎知道很多Git魔术,你能评论什么时候(或为什么)你的答案是更好的事情吗? –

+0

如果我正确理解Sean的解决方案,那么不正确的文件将保留在历史记录中,并且您将有一个提交将其更改回正确的版本。这是一个合理的事情,但你说你希望它看起来像你从未对文件做过任何事情。没有重新绑定或分支过滤,你无法实现这一目标。 – svick

+0

是的..所以我重新... 我做了一个主结账,并重新与所有以前的承诺,重新设计的分支还记得改变,然后改变该文件? –