免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8772 | 回复: 9
打印 上一主题 下一主题

[其他] 用Git管理的代码,如果我git checkout 之前的提交,如何回到后面的提交? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-17 16:37 |只看该作者 |倒序浏览
比如
我有5次提交,都是本地的
commit id 是
5xx
4xx
3xx
2xx
1xx
然后git checkout 3xx
发现不对,然后想git checkout 5xx但是那个commit id不记得了
而且git log也看不到,怎么办?

论坛徽章:
0
2 [报告]
发表于 2013-05-17 17:25 |只看该作者
git checkout <Branch Name>

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
3 [报告]
发表于 2013-05-17 18:34 |只看该作者

git log         

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
4 [报告]
发表于 2013-05-17 18:38 |只看该作者
darkread 发表于 2013-05-17 16:37
而且git log也看不到,怎么办


这就不对了, 没有 git log 看不到的可能, 就你的描述, 你肯定做了其他操作
办法还是有:
git reflog

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
5 [报告]
发表于 2013-05-17 18:39 |只看该作者
zylthinking 发表于 2013-05-17 18:38
这就不对了, 没有 git log 看不到的可能, 就你的描述, 你肯定做了其他操作
办法还是有:
git refl ...


次奥, 是看不到了, 我现在头晕,
gitref log 可以找到

论坛徽章:
0
6 [报告]
发表于 2013-05-17 21:13 |只看该作者
zylthinking 发表于 2013-05-17 18:39
次奥, 是看不到了, 我现在头晕,
gitref log 可以找到


O(∩_∩)O哈哈~
又被我玩晕一个。开玩笑、开玩笑。
一个下午没有想通,刚才看到你的头晕,我突然开窍了。

我的工作模式就是
修改->增加功能->commit,如此循环,那么commit频率很高,因此我选择了git作为代码回溯的工具(回溯的作用比版本管理大)。
很可能出现commit了3回后,发现这三次的代码可能有问题,需要3次commit之前的,但我又想不想去掉这三次commit的代码,那么就git log找到<3次前的commit_id>,然后git checkout <3次前的commit_id>。

但这样,就git log就没有了后三次的<commit_id> --all也么用,
因为如果git branch ,会显示当前的代码不在任何的分支上。

那么我只能git checkout <3次前的commit_id> ,然后把代码文件复制出来,再git checkout <刚才的分支名>继续,然后复制回来刚才复制出去的文件,继续干活。

为什么不行?因为git毕竟还是以版本管理为主,主线是把一次一次commit串起来,那么git checkout <3次前的commit_id>对git管理的版本树来讲毫无意义,如果checkout <分知名>指向了<3次前的commit_id>,那么这个commit点之后的版本算什么?因此,checkout <分知名>肯定是指向每个分支最新的那个commit,你要修改了<3次前的commit_id>指向的代码,也不能直接commit回去,如果可以,然这个代码放在那里呢?它不是本分支最新代码的更新版本,嵌在<3次前的commit_id>和<3次的commit>之间么?它又只是<3次前的commit_id>的一个分支,和<3次的commit>的代码没有关系。

因此,git认为这个代码可以checkout出来,但是不能commit回去,除非是checkout commit_id -b new_branck,另行分支开发。至于如何merge两个分支,我还么仔细看。

看了以后我的git树会非常的枝繁叶茂。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
7 [报告]
发表于 2013-05-17 21:32 来自手机 |只看该作者
本帖最后由 zylthinking 于 2013-05-17 21:34 编辑

打了这么多字,还说开窍了,  难道没看到我已经告诉你办法了吗。?

论坛徽章:
0
8 [报告]
发表于 2013-05-17 21:45 |只看该作者
http://www.linuxidc.com/Linux/2013-03/81068p2.htm
在这里找到了更加NB的,详解了各种本地开发场景。

论坛徽章:
0
9 [报告]
发表于 2013-05-17 21:47 |只看该作者
回复 7# zylthinking


    这样的弊端是
当前会处于no branch状态。

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
10 [报告]
发表于 2013-05-17 23:11 |只看该作者
man git checkout
里面的HEAD detached state讲的就是这个玩意儿。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP