我是Git分支复杂的新手.我总是在一个分支上工作并提交更改,然后定期推送到我的远程源.
在最近的某个地方,我重置了一些文件以使它们脱离提交暂存,后来又做了一个rebase -i去除几个最近的本地提交.现在我处于一种我不太了解的状态.
在我的工作区域,git log显示我所期待的 - 我在正确的火车上,我不想要的提交,以及那些新的,等等.
但是我只是推送到远程存储库,并且有什么不同 - 我在rebase中杀死的一些提交被推送,而本地提交的新提交不存在.
我认为"master/origin"与HEAD分离,但我不是100%清楚这意味着什么,如何使用命令行工具将其可视化,以及如何修复它.
我一直在Windows上使用git一段时间(使用msysGit),我喜欢分布式源代码控制的想法.就在最近,我一直在关注Mercurial(hg),它看起来很有趣.但是,我无法解决hg和git之间的差异.
有没有人在git和hg之间进行并列比较?我很想知道hg和git的不同之处,而不必参加讨论.
来自mercurial,我使用分支来组织功能.当然,我也想在我的历史中看到这种工作流程.
我使用git开始了我的新项目并完成了我的第一个功能.合并该功能时,我意识到git使用快进,即如果可能,它会将我的更改直接应用到主分支并忘记我的分支.
因此,思考未来:我是唯一一个从事这个项目的人.如果我使用git的默认方法(快进合并),我的历史将导致一个巨大的主分支.没有人知道我为每个功能使用了一个单独的分支,因为最后我只有那个巨大的主分支.这看起来不专业吗?
通过这种推理,我不想要快进合并,也不知道为什么它是默认的.这有什么好处的?
有一段时间我一直在为我的个人项目使用subversion.
我越来越多地听到关于Git和Mercurial以及DVCS的一般情况.
我想给整个DVCS带来一些旋转,但我对这两种选择都不太熟悉.
Mercurial和Git有什么区别?
注意:我不是要找出哪一个是"最好的",甚至不应该从哪个开始.我主要寻找他们相似的关键领域,以及他们不同的关键领域,因为我有兴趣知道他们在实施和理念方面有何不同.
我有时很难尝试查看git存储库历史中发生的事情,即使使用像SourceTree这样的强大工具,分支图也可能令人困惑.对我来说,主要的问题是我无法分辨哪些分支的某些提交,并且单个分支上的提交字符串通常显示在不同的视觉行上,因为并发分支和在分支上工作的人数增加和减少.
我最初的想法是"如果git存储了提交的分支名称怎么办?那么图表生成器可以将这些提交分组在同一行上".这个问题:为什么Git不将分支名称存储为提交的一部分?问同样的事情(但由于不同的原因),在阅读它和其他一些链接之后,我意识到简单地存储分支名称无论如何也无法解决我的问题.例如,当多个人在其本地分支上使用相同的分支名进行交替提交时,尝试在同一行上显示这些提交在技术上是错误的.
无论如何,等我的问题......
关于问题2:我想的可能是一个名为"工作流"的东西.创建分支时,您可以选择提供工作流名称(或从当前分支的工作流名称"继承"),并且在切换分支时,当前工作流也会发生变化.因此,每个提交都将在工作流的上下文中进行,并且该信息可以存储在提交中,也可以作为单独的元数据存储在git仓库中.我真的不知道git的内部工作方式,所以可能有其他/更好的方法来实现这一点.然后,分支图可以做一些视觉上明显的事情(例如不同的背景颜色),以帮助查看提交链如何在不同的工作流之间流动.
git ×5
dvcs ×2
mercurial ×2
branch ×1
comparison ×1
fast-forward ×1
git-branch ×1
git-merge ×1