Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 - Fatal编程技术网

Git 删除远程功能分支中浪费的提交

Git 删除远程功能分支中浪费的提交,git,Git,我有这棵树 * commit origin/master | * commit origin/my-feature-branch | * commit | * commit | * commit |/ | * commit origin/other-feature-branch |/ 我想保留origin/master,但我想挤压origin/myfeature分支,使其干净。我的“策略”是: git签出我的功能分支 git rebase-i头~4 # ... 保留第一个拾取线,并更

我有这棵树

* commit origin/master
| * commit origin/my-feature-branch
| * commit 
| * commit 
| * commit 
|/  
| * commit origin/other-feature-branch
|/
我想保留
origin/master
,但我想挤压
origin/myfeature分支
,使其干净。我的“策略”是:

git签出我的功能分支
git rebase-i头~4
# ... 保留第一个拾取线,并更改壁球中的所有其他线
# ... 将提交消息更改为一个
git推送源:我的功能分支
git push origin my feature分支
我的新树现在干净了

* commit origin/master
| * commit origin/my-feature-branch
|/  
| * commit origin/other-feature-branch
|/

正确的方法是什么?

您的想法基本上是正确的,不过,您可以直接使用

git push origin my-feature-branch -f
您希望首先删除远程分支的唯一原因是,如果在远程上禁用了强制推送,那么首先删除它是一种“欺骗”的方式,可以绕过该限制……尽管如果存在该限制,一定有人不希望您强制推送,因此,确保重写分支实际上对您的团队来说是合适的


关于将重写的提交推送到公共分支的强制性警告:如果您的分支与其他开发人员共享,强制推送重写的提交将迫使其他开发人员将其工作与新提交重新同步,因为他们都有旧提交的副本。这可能是一个困难的过程,这取决于您团队的Git技能,因此请确保您的团队确实同意您这样做。

这会修改共享提交,这在Git中几乎总是一个坏主意。网上有很多文章和很多答案解释了为什么不鼓励这样做。@Chris true,但有些情况下用户确实希望这样做,有时甚至在共享分支时(小型开发团队可以更有效地组织以与重写的工作同步)。@Cupcake同意。但重要的是要理解为什么这样做是不鼓励的,以便正确地做。