git merge --squash -X他们的<commit>

时间:2016-03-03 07:27:59

标签: git merge

我想把一个非常凌乱的分支清理成一个新的分支,我只希望得到一些状态。

最初的解决方案是复制粘贴方法:

$ git checkout 1234567
$ cp -r . /tmp/git
$ git checkout -b new old
$ git ls-files | xargs rm 
$ cp -r /tmp/git .
$ git commit -a -m "Step 1"
...

我认为git merge --squash -X theirs会产生同样的效果,但即使是Automating merge went well,当我git diff --stat 1234567时,我仍然会看到差异。

我显然错过了关于--squash -X theirs的一些事情。

如何使用native git命令重现我的复制粘贴方法。我们的想法是将提交状态压缩到另一个分支,而不仅仅是正常rebase所做的差异。

另一种方法是使用此命令:

$ git ls-files | xargs rm && git checkout 1234567 $(git ls-tree --name-only -r 1234567)
$ git commit -a -m "New commit name"

实际上我已将此别名添加到我的.gitconfig

[alias]
    import = "!sh -c 'git cat-file -e $0 && \
                      git ls-files | xargs rm -f && \
                      git checkout $0 $(git ls-tree --name-only -r $0)'"

0 个答案:

没有答案