git branch stash提交成一个

时间:2014-07-16 14:57:02

标签: git github

民间,   我想在推送到github之前将我的分支中的几个提交合并为一个。分支名称为mybranch

如果我没有误会,以下命令应该为我提供压缩提交的选项。

git rebase -i mybranch

我不认为它确实有效...它只是说

noop

# Rebase 39e50c2..39e50c2 onto 39e50c2
#
# Commands:
#  p, pick = use commit
...

我做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

您实际上无法合并提交停留在一个分支上。但您可以使用以下步骤完成它:

# reset all changes after commit that already is pushed to remote repo
# option --soft will save all the changes in stage area 
git reset --soft origin/mybranch
# here all you changes is in stage area so you can commit
git commit -m "squashed commit"
git push

为了更好地理解命令git reset的格式:

git reset <mode> <commit>

模式--soft

  

- soft根本不触摸索引文件或工作树(但是将头重置为,就像所有模式一样)。这留下了所有   你改变的文件“要提交的更改”,就像git status所说的那样   它

origin/mybranch指向上次推送到原始提交。

如果您的mybranch是本地分支(即未被推送到远程),您可能会重置为它偏离的分支。

答案 1 :(得分:1)

Rebase在提交图中将提交从一个地方移动到另一个地方,因此您无法将分支重新绑定到自身,因为这将是一个noop - 就像消息所说的那样。相反,在mybranch上,你可能想要做的是改变它分支的分支。例如,如果它与master不同,则需要

git rebase -i master

查看&#34;功能/修正分支工作流程&#34;在我的备忘单上获取更多信息http://philipdaniels.com/gitcheatsheet/

特别是,如果其他人正在推动对您的回购的更改,那么理解为什么建议重新定位到origin / master(步骤7)是一个好主意:它会强制您解决当时的任何合并冲突