汞提交和合并



对于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" 

米奇准备提交和推动,但必须合并: 米奇做: $ hg 拉 -u

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

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

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

然后像往常一样推动。

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

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

你的问题对我来说并不完全清楚,如果我弄错了,请纠正我。

米奇在他的回购中是这样的(A — 米奇的变更集,a已更改,D — 高飞的变更集,d更改,w — 米奇的工作副本与bc更改):

-- 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"

从这里开始,米奇可以合并,也可以变基(顺便说一下,与高飞合并也可以是变基)。

最新更新