我现在一直在使用Git,我真的很喜欢它,但有一点我无法理解。几乎每次我开始一个我不知道自己正在进入的项目时遇到这种情况(在这种情况下是Node.js):
我在一个项目中走得很远,就像一个好的Git公民一样。然后我皇家陷入困境......或者意识到我无法挽救我现在的代码。我想开始新鲜,但因为我是肛门,我不想失去我的git提交。有没有办法将git提交“转移”到这个新项目?
编辑:感谢您的快速回复 - 我忘了添加。这个新项目将位于git repo之外的新基本文件夹中。我会将git repo复制到该目录吗?删除文件然后提交对我来说不起作用,因为我在转换到新项目时从上一个项目中获取工作片段。
谢谢! 马特穆勒
答案 0 :(得分:1)
@matt,您可以在当前主(或任何分支)之外创建一个新分支,然后执行
git reset --hard HEAD~n
其中n是您想要返回的提交数。但要小心,在重置主机之前确保新分支具有您想要的提交,因为硬重置将它们吹走(我认为)。
您还可以通过其sha1哈希返回特定提交,语法应该类似。
答案 1 :(得分:1)
嗯,这取决于你想要恢复到良好状态的确切方式。
如果你只是想要注销一些先前的提交(工作单元)与好的提交混合,那么使用git rebase -i HEAD~10
...增加“10”足够远,并删除垃圾提交。
如果您想将单个文件还原为旧版本,请执行git checkout HEAD~10 -- Node.js
将其拉入当前工作区,然后提交该文件,表示您要恢复所有更改,因为......您明白了
如果您只想删除一堆最近提交的内容,可以git reset --hard HEAD~10
或其他任何内容恢复旧版本。
答案 2 :(得分:1)
您已在初始提交中拥有代码的基础。
执行此操作的一种方法是在当前分支的顶端添加标记,然后使用git-reset --hard
将项目退回到最开始,然后从那里继续。
我更喜欢在这种情况下使用标签,因为只要你有一个标签,提交就会被生根并且不会被垃圾收集。此外,如果你经常使用分支,那么你不会总是被死分支分心,因为标签不会出现在分支列表中。
答案 3 :(得分:0)
您可以复制旧的git repo,重命名旧的分支(以避免将来混淆)然后使用git cherry-pick [rev]
或git checkout [rev] -- [filename]
,具体取决于您是要选择特定提交还是获取文件他们处于特定的状态。作为第三种可能性,您可以git rebase --interactive
消除损坏的提交并根据您的需要重新排列其他提交。
我还建议使用A successful Git branching model中描述的工作流程,即(除其他建议之外)使用一次性分支进行实验性功能,并且在您知道它们没问题之前不要将它们合并:
http://nvie.com/img/2009/12/Screen-shot-2009-12-24-at-11.32.03.png