Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 从主控形状合并后挤压特征分支提交_Git_Version Control_Merge_Rebase_Pull Request - Fatal编程技术网

Git 从主控形状合并后挤压特征分支提交

Git 从主控形状合并后挤压特征分支提交,git,version-control,merge,rebase,pull-request,Git,Version Control,Merge,Rebase,Pull Request,我试图将一个分支中的提交压缩到最终合并到master时(在pull请求之后,如果被批准),提交历史看起来是干净的 git rebase -i 改写历史 然而,在开发其分支中的功能时,我必须将主功能的内容合并到分支上,因为由于其他功能分支被合并,主功能通常会向前移动 我看到我将主控合并到功能分支中的那个些,我无法压扁他,他使用交互式重基提交了更多内容。在拉取请求期间,它会导致异常差异,即作为主节点合并的一部分进行的更改 在这种情况下,挤压提交的最佳方法是什么?如果您只想挤压所有内容,那么您有一种

我试图将一个分支中的提交压缩到最终合并到master时(在pull请求之后,如果被批准),提交历史看起来是干净的

git rebase -i
改写历史

然而,在开发其分支中的功能时,我必须将主功能的内容合并到分支上,因为由于其他功能分支被合并,主功能通常会向前移动

我看到我将主控合并到功能分支中的那个些,我无法压扁他,他使用交互式重基提交了更多内容。在拉取请求期间,它会导致异常差异,即作为主节点合并的一部分进行的更改


在这种情况下,挤压提交的最佳方法是什么?

如果您只想挤压所有内容,那么您有一种更简单的方法,不依赖于使用交互式重定基址。您只需对主分支执行软重置,然后提交这些更改:

git reset --soft master
git commit -m 'All changes from my branch squashed'

这基本上会重置指向
master
分支的分支指针,而不会更改工作目录中的任何内容。因此,结果是索引中的所有更改都可以立即提交。

如果需要,功能分支位于主分支的顶部,以便拉取请求包含来自合并的其他功能分支的更改。您可以使用以下命令:

git checkout feature
git pull origin master --rebase
这将在从原始主分支获取后,在主分支顶部重新设置要素分支的基础

我试图将一个分支中的提交压缩到最终合并到master时(在请求被批准后),提交历史看起来是干净的

您可以使用
软重置
挤压分支(例如,
功能
)提交。假设您在
功能
分支中有5次提交。现在您需要5次提交=1次新提交

$ git checkout feature
$ git log                        # see how many commits do you need to squash

$ git reset --soft HEAD~4        # note: if you have N commits then HEAD~{N-1}
Or, git reset --soft <first-commit> # reset to first commit of your branch

$ git add .                      # add the files  
$ git commit --amend -am 'Squash all commits'  # squash all the commits

$ git push -f origin feature     # force(-f) push to remote since git history is changed  

现在使用GitHub GUI(浏览器)创建拉取请求。

这不要求本地提交是最后4个吗?如果定期与master合并,则不太可能出现这种情况。
--amend
是否有必要?它在这里做什么?
--amend
将当前本地更改与以前的提交(第一次提交)合并。实际上,git需要:last commit+current local changes=生成一个全新的commit(commit hash/ref已更改)@波尔兹曼:这个答案很好。我过去常常查看git日志,找到我不想包含在压缩中的最后一个内容的提交哈希,然后对该提交进行软重置。即使您已经将其他分支合并到您的分支中,并且git日志很混乱,这个解决方案也能得到我想要的。我的同事曾经做过交互重基,在我告诉他这个方法后,他也会切换。效果很好。谢谢
$ git pull origin master