在远程分支中压缩任意提交

时间:2016-10-24 18:10:18

标签: git version-control server gitlab

我是Git的一个小伙子,我的任务是清理我最近开发的一个功能的历史。我对这个人here有类似的设置。我也想要完成同样的事情,但我想要压缩到特定的提交。例如,如果我的提交是 commit1,commit2,...,commitN ,我想让它成为 commit1,commit2,.. 。 被压缩为 commitX ; commitX + 1,commitX + 2,... 被压缩为 commitY ;等

我知道这可以通过命令

实现
git rebase -i origin/*branch_name*

但问题是,当我运行该命令时,我得到了这个:

noop

# Rebase a112005..a112005 onto a112005 (1 command(s))
...

据我所知,最后和第一次提交应该在这里显示,但它只能看到最后一次提交。当我尝试使用任何其他提交进行选择或压缩时,它会说:

error: could not apply *commit hash*... *commit message*

这显然意味着它找到了提交,因为它知道它的消息,但由于某种原因,它甚至不认为它是可编辑的。任何人都知道如何解决这个问题?此外,如果有人为我的设置建议更好的基于终端的同步系统或更好地组织我的东西,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您无法在远程跟踪分支上执行任何操作。事实上,你不能在" on"首先是一个远程跟踪分支。 (git checkout命令是将你"放在分支上的命令,如git status所示;但它不会让你进入远程跟踪分支,只能在本地分支。)

通常,要在Git存储库中进行某些操作,您必须使用 分支名称在您的 Git存储库中实现它。

当你想在某个 else 的Git存储库(例如origin上的某个存储库)中发生某些事情时,你这样做的方法首先是获取所有内容在您的存储库中设置,然后使用git push 询问他们将您的工作带入他们的存储库并设置 >他们的分支名称匹配。

如果你问他们 - 另一个控制其他存储库的Git - 将 branch-name 设置为指向某个特定的提交, 1 并且他们同意,然后,此时你的 Git会将你的origin/branch-name设置为指向同一个提交,因为他们的 Git告诉你的,是的,它现在正在使用该特定分支的特定提交。

1 他们需要拥有提交,但如果他们还没有提交,那么您的git push会首先提供给他们。这就是git push的工作原理。首先,它交出你拥有的一组物品,他们不需要他们接受你的要求;然后,它会移交一系列请求:"请设置分支 B1 以提交 1234567 ... ,和/或分支 B2 提交 89abcde ... ,和/或将标签 T 设置为..."。他们的Git不服从,部分或全部这些请求,发送" ok"或者"不,这就是为什么"每个人的回答。