这是一个文件,我可能在我的分支中意外更改了一个文件,我已经承诺并重新进行了多次修改。在我将这个分支交给其他人之前,我想让git忘记我曾经为这个文件做过任何事情。让git忘记我对文件做了任何事
如何让git从master分支(其他人已更新)获取该文件的最新版本,并忘记我的分支曾经触及该文件的事实?
这是一个文件,我可能在我的分支中意外更改了一个文件,我已经承诺并重新进行了多次修改。在我将这个分支交给其他人之前,我想让git忘记我曾经为这个文件做过任何事情。让git忘记我对文件做了任何事
如何让git从master分支(其他人已更新)获取该文件的最新版本,并忘记我的分支曾经触及该文件的事实?
从主人签出文件以覆盖您的更改可能是最容易的。在提交刚签出的文件后,您可能希望重新分割/压缩分支以删除对该文件所做的任何提交。语法结帐是:
git checkout origin/master <path_to_file>
更高级的选项可能是使用git-filter-branch
当你的一个分支,可以从master
签文件:
git checkout master the_file
提交这一变化然后找到你意外更改文件的提交sha1。并使用
git rebase -i that_sha1
您会看到分支中的提交列表,从最旧到最新。在第一行(不正确的提交)之后移动最后一行(您刚完成的修复提交)并将pick
更改为fixup
。这将和修改不正确的提交具有相同的效果,然后在其上重新提交其余的提交。
这一切都假定你没有发布你的分支。如果你这样做了,现在也有其他人也有,那你就麻烦了。
这个答案绝对似乎更正确,但肖恩的一个是很多简单(对于git noob),似乎已经为我完成了这项工作(git diff --name-only'ing against master does not show the因为你似乎知道很多Git魔术,你能评论什么时候(或为什么)你的答案是更好的事情吗? –
如果我正确理解Sean的解决方案,那么不正确的文件将保留在历史记录中,并且您将有一个提交将其更改回正确的版本。这是一个合理的事情,但你说你希望它看起来像你从未对文件做过任何事情。没有重新绑定或分支过滤,你无法实现这一目标。 – svick
是的..所以我重新... 我做了一个主结账,并重新与所有以前的承诺,重新设计的分支还记得改变,然后改变该文件? –