git checkout -- file 时能否自动备份一下修改过的文件?

2014-02-23 05:07:57 +08:00
 guoqiao
昨天修改一个问题, 由于反复尝试, 一不小心改了同一个文件夹下的好几个文件, 如:

dir/a.py
dir/b.py
dir/c.py
....

但是有一个文件例如c.py是不想提交的.
我执行 git checkout 时手太快, 输入git co -- dir就 enter 了.
这时意识到杯具鸟...
由于修改的代码还是比较多的, 当时真是惊出一身冷汗,心想2个小时的工作没了...
还好我 vim 里的 buffer 还在, 重新逐一保存了下, 都救回来了.

我记得以前用别的 VCS, 每次你恢复文件的时候, 会创建一个c.py.orig 之类的备份.
在 git 下, 有类似的功能吗? 或者, 大家用 git 时是如何避免我这样的杯具的?
6996 次点击
所在节点    程序员
27 条回复
guoqiao
2014-02-23 13:28:30 +08:00
@9hills 汗, 你真的没有仔细看我的问题, 或者我描述得太差劲了...
我就是为了清理掉这个文件, 结果不小心把所有的修改都清理了
本来是想执行:
git checkout -- dir/c.py
结果手太快, 成了:
git checkout -- dir
于是a.py, b.py, c.py都被恢复了.
9hills
2014-02-23 13:40:21 +08:00
@guoqiao 那你应该先add修改的a.py和b.py,然后checkout 掉c.py

不过这个一般是误操作啦,git多add总没错,不爽可以reset HEAD么
SoloCompany
2014-02-24 01:47:36 +08:00
一直弄不懂git的命令行,为什么没有revert命令只有checkout来代替revert功能,比如svn你如果revert一个目录不加recursive参数是不让执行的,这样也不会发生类似的误操作了。还有另一点就是难道不能单独提交若干个文件的吗?反正我是试过好几次都没成功,为了提交文件必须把不想提交的文件恢复,很麻烦
guoqiao
2014-02-24 04:56:21 +08:00
@SoloCompany
可以单独提交文件的,例如我这里的情况, 你可以只提交a.py:
git commit -m "foo" dir/a.py

不过我同意, git 确实太晦涩, 和 linux 一样, 强大, 但是太不易用.
额, 在它俩如日中天的今天说这种话肯定会被喷...
先闪了
guoqiao
2014-02-24 05:00:39 +08:00
@SoloCompany 我强烈认为 checkout 命令是设计缺陷.
明明有 branch 命令, 却要用 checkout -c 来创建分支.
切换分支也是checkout xxx
恢复文件也是这货, 为了区分文件和分支名, 要写成 checkout -- xxx.py
对命名有强迫症的表示严重受不鸟 T_T
SoloCompany
2014-02-24 11:59:13 +08:00
@guoqiao 我也觉得应该可以单独提交,但我用 github 客户端就强制我必须要提交所有文件,然后它的界面是可以有CheckBox 选择的,我就选择了两个文件,然后点 commit 然后意外的发现另外一个没选的文件也同时 commit 了,真不知道是软件的bug还是我理解错误了
ldc4
2016-05-20 09:35:24 +08:00
恩,看完你们的对话,了解到 checkout 是怎么区分分支和文件名了。 :p

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/101419

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX