GIT非常难用 -- 我已经指定了代码版本, 但是编译出来版本不对

宏哥 发布于 2012/12/06 13:19
阅读 3K+
收藏 0
Git

附图:

如果是hg , 很方便, hg update -r 就可以确定本地代码的版本号.

唯独这个 git, 如何确定当前代码树版本, 不知道怎么回事. branch 显示9.2,编译出来居然是master最新的9.3dev.

简直乱套

加载中
0
逝水fox
逝水fox

遇到过这个情况是

master修改了文件没有提交的情况下,切换到另外一个分支,之前的修改会保留。不过checkout的时候应该有一行提示

0
宏哥
宏哥

引用来自“逝水fox”的答案

遇到过这个情况是

master修改了文件没有提交的情况下,切换到另外一个分支,之前的修改会保留。不过checkout的时候应该有一行提示

这就是问题的原因了

我得重新恢复一次. git 没有提示.

0
宏哥
宏哥

引用来自“逝水fox”的答案

遇到过这个情况是

master修改了文件没有提交的情况下,切换到另外一个分支,之前的修改会保留。不过checkout的时候应该有一行提示

我重新checkout 一次, 还是不对

非常惊讶git的这种行为, 既然标示 branch已经改变, 但是实际没有改变


宏哥
宏哥
回复 @逝水fox : 可能是因为我没有修改任何文件, 只是运行过configure. 实际上, git checkout 只修改了branch信息, 并没有对本地文件进行回滚.
逝水fox
逝水fox
回复 @宏哥 : 其实很奇怪为什么你那边checkout切换分支的时候没有提示那些文件有修改?虽然不明显,不过确实会有个"M 文件名“这样一行提示才对。这个设计也说不上不好,不过提示的确实不太明显就是了。
宏哥
宏哥
回复 @逝水fox : 我已经删除那个代码树了,重新从远程clone一份. GIT可怕之处在于, 我本地做了一个clone,这种修改仍然会被clone, 实际上修改并没有提交. 不浪费时间, 重新clone一份干净的.
逝水fox
逝水fox
checkout没用,先checkout切换到9.2的那个分支,然后用命令git reset --hard回退。不过你9.3的修改就丢掉了
0
宏哥
宏哥

从checkout 这个动作,可以看出git是非常自以为是的"牛"做的东西. 

基本的功能都有如此不一致性.浪费我几次编译时间.

hg 可以用hg up -C确保这种一致性. 

0
泡不烂的凉粉
泡不烂的凉粉

像这种对外有发布的版本, 基本上都是做过 tag 之后才发布的.

并且对于发布后的分支, 基本上都只有临时的fix分支,不会单独存在分支, 

需要某个特定版本的源码, 一般都是 git tag 来找特定分支,

然后 git checkout -b (新分支名) (tag) 这样的方式, 在特定的 提交历史下面建立个新的分支. 然后 开始编译 源码. 

你看一下 tag 里面有没有你要的. 找对版本, 应该不会搞错分支的. 源码也不应该对应不上.

0
宏哥
宏哥

引用来自“逝水fox”的答案

遇到过这个情况是

master修改了文件没有提交的情况下,切换到另外一个分支,之前的修改会保留。不过checkout的时候应该有一行提示

我用 git reset --hard 进行回退, 仍然不对.

难道是代码中的版本号修改了?


0
宏哥
宏哥

引用来自“逝水fox”的答案

遇到过这个情况是

master修改了文件没有提交的情况下,切换到另外一个分支,之前的修改会保留。不过checkout的时候应该有一行提示

我已经确定这是GIT的一个重大BUG.

你给出的方法, 在tag上可以生效

但是对header无效. 如果header不能用来管理, 那么header用来做啥的?

命令对于header又是执行成功的, 令人费解.

GIT不要说比hg, 比CVS都差太远了. 

空有一个分布式的名字而已.

宏哥
宏哥
回复 @逝水fox : 这个确实太令人感到费解了. 一个基础的功能, 本来指望它能工作的.
逝水fox
逝水fox
别激动嘛,我其实也就一个正式分支,一个开发分支,还是玩的单机没服务器...所以才说我不会用
0
泡不烂的凉粉
泡不烂的凉粉
淡定, 版本控制我是用过的并不多, 不过 git 是感觉最好用的一个.
0
宏哥
宏哥

引用来自“看能不能改个名”的答案

淡定, 版本控制我是用过的并不多, 不过 git 是感觉最好用的一个.

已经找到问题所在了. 放弃根据header回滚.

只能通过tag进行回滚.

公正的比较, HG 好用很多. 尤其是对于日常操作, 回滚, 查看历史等等.

泡不烂的凉粉
泡不烂的凉粉
git 中的 tag 只是一个很方便的标签. 每次版本发布打标签,只是约定俗成的规矩,并不是必须的. 要想回滚到指定版本, 除了用tag方式外, 可以直接使用 提交 记录号. git log 的时候,会看到 commit 后面一串编号.tag只是这些编号的别名. 完全可以 checkout xxxxxx 这样的方式检出想要的历史.
返回顶部
顶部