1 repo中的某个版本刷新到working tree,这个刷新就是合并。挺好,显式的动作。
2 reflog没有丢就好。猜测你说的软件,是reset后,show log后,可以看到最远的log,而不是只显示到所在版本这个区别。
有时不是写的代码复杂,是业务本身复杂。你做架构给同事们用时,就会深有体会。包括vim,实际是对“编辑、编码、修改代码”这个业务本身,进行了大量的抽象。至于这种抽象,不掌握也能干活。就像鼠标点点选选。有人用svn或git,怕搞不定,就拷贝一个副本,pull完再拷贝回来。都行。至于抽象质量的高低,就是看能不能通过尽可能少的正交的概念,覆盖所有业务,其次是方便理解。
git项目是不是shit mountain,跟git的使用体验没关系。要看代码本身多少行,写的怎么样,要增加、修改一个功能难不难。
【 在 hyperLee 的大作中提到: 】
: 1 mercurial中, 和git一样是区分working tree和repo的。repo中就是历史版本的“数据库”, mercurial中你要是pull的话, 只是拉去对方的repo,而当前working tree根本不涉及, 所以无论你working tree处于什么状态, 都所谓。
: 但是你要将repo中的某个版本刷新到working tree中,这时候mercurial会提醒你,如果Work tree中有改动。 这时候你可以有各种选择,比如强制刷新,比如shelve(把改动暂存起来,刷新后有必要的话手动在恢复出来)或者放弃等。重要的是,所有的选择产生的结果都符合你的直觉,不会说把你的某个提交搞得隐藏起来,让你都不知道。
: 2 你要是用git checkout的话,没问题;你要是用git reset的话, 你自己看一下log,不就知道效果了?reflog是没有丢,但你能在改动历史中看到吗?
: ...................
--
FROM 61.185.159.*