【问题标题】:Mercurial commit and mergeMercurial 提交和合并
【发布时间】:2012-06-04 12:55:56
【问题描述】:

使用 Mercurial,我经常看到需要逐步提交推送的情况,但如果其他人在此过程中提交,那么我就会遇到问题。

示例:假设 HG 存储库有四个文件 a.txt、b.txt、c.txt、d.txt,我们有两个用户 Mickey 和 Goofy:

Mickey does:  $ echo "change1" >> a.txt
Mickey does:  $ echo "change2" >> b.txt
Mickey does:  $ echo "change3" >> c.txt
Mickey does:  $ hg commit -m "I am good" a.txt
Goofy does:   $ hg pull -u; echo "change4" >> d.txt; hg commit -m "The Donald change" 

Mickey 准备好提交和推送,但必须合并: 米奇:$ hg pull -u

现在米奇有两个变化 - b.txt 和 c.txt。让我们假设他在 c.txt 中的更改很复杂,现在不能发布。 Mickey 如何在不提交 c.txt 的情况下提交并推送他在 a.txt 和 b.txt 中的更改?

【问题讨论】:

    标签: mercurial mercurial-commit


    【解决方案1】:

    只需发出您有兴趣提交的文件名:

    hg commit a.txt b.txt -m'partial commit'
    

    然后像往常一样推送。

    编辑:我可以尝试将本地更改保存为补丁,还原并拉取远程更改,然后应用补丁:

    hg diff > local.patch
    hg revert
    hg pull -u
    patch -p1 < local.patch
    

    【讨论】:

    • 不好 - 米奇需要合并才能提交,问题是 c.txt 还不能提交....
    • 我的错,我没有仔细阅读这个问题......那么将更改放在单独的分支中(甚至克隆 repo)呢?
    • 我认为你需要一个“hg revert”。在第一个 hg diff 之后
    • shelve extension 可以是补丁方法的更简单替代方案。
    【解决方案2】:

    你的问题我不是很清楚,如果我理解错了,请纠正我。

    Mickey 在他的 repo 中有这个(A——Mickey 的变更集,a 发生了变化,D——Goofy 的变更集,d 发生了变化,w——Mickey 的工作副本,b 和 @987654328 @改变):

    -- o --- A --- w
        \
         D
    

    现在米奇有很多选择。 b 准备释放,所以他立即提交:

    $ hg ci b.txt -m "Finished working on b.txt"
    
    -- o --- A --- B --- w
        \
         D
    

    现在工作副本中只剩下c 更改。米奇做了一个中间提交:

    $ hg ci -m "working on c"
    
    -- o --- A --- B --- C' --- w
        \
         D
    

    工作副本是干净的。为了确保 C' 不包含在合并中,Mickey 更新到之前的变更集,然后合并:

    $ hg up B
    $ hg merge D
    $ hg ci -m "Merged with Goofy"
    
    -- o --- A --- B --- C
        \           \
         D --------- M --- w
    

    现在 Mickey 可以继续处理 C,并在准备就绪时修改提交:

    $ hg up C
    $ echo "final change" >> c.txt
    $ hg ci --amend -m "Finished working on c.txt"
    

    从这里开始,Mickey 可以合并或变基(顺便说一句,与 Goofy 合并也可以是变基)。

    【讨论】:

    • 我从未见过的选项“--amend” - HG 2.1.2 无法识别它。这是一个新选项吗?
    • @PeterToft: --amend 是在大约一个月前在Mercurial 2.2 中介绍的。不是说其他​​方式达不到效果,而是非常好用。如果没有此选项,您可以使用 MQ(qimport、qrefresh,然后是 qfinish)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2012-08-17
    • 1970-01-01
    • 2011-03-14
    • 2015-10-05
    相关资源
    最近更新 更多