混帐没有自动提交

有没有可能做一个“混帐合并”,但没有提交?

“man git merge”这样说:

With --no-commit perform the merge but pretend the merge failed and do not autocommit, to give the user a chance to inspect and further tweak the merge result before committing. 

但是当我尝试使用git合并–no-commit它仍然自动提交。 以下是我所做的:

 $> ~/git/testrepo$ git checkout master Switched to branch 'master' $> ~/git/testrepo$ git branch * master v1.0 $> ~/git/testrepo$ git merge --no-commit v1.0 Updating c0c9fd2..18fa02c Fast-forward file1 | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) $> ~/git/testrepo$ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) 

随后的“git log”揭示了v1.0分支合并到master的所有提交。

注意合并时的输出 – 这是说Fast Forward

在这种情况下,你想要做的是:

 git merge v1.0 --no-commit --no-ff 

你在这里误解了合并的含义,–no-commit阻止了MERGE COMMIT的发生,只有当你合并两个发散的分支历史时才会发生这种情况。 在你的例子中,情况并非如此,因为git指示它是一个“快进”合并,然后git只按顺序应用已经存在于分支上的提交。

如果您只想提交一个提交中的所有更改,就好像您自己input了一样,–squash也会执行

 $ git merge --squash v1.0 $ git commit 

我更喜欢这种方式,所以我不需要记住任何罕见的参数。

 git merge branch_name 

然后它会说你的分支在#提交前面,你现在可以把这些提交closures,并把它们改成如下的工作:

 git reset @~# 

例如,如果在合并之后它是1提前提交,使用:

 git reset @~1