重新设置远程 feature/bug/topic(私有)分支
Rebasing remote feature/bug/topic (private) branch
这条规则是为了不对推送到远程存储库的提交进行变基。
只要我了解一般原因,我就不清楚,它是否也适用于这种情况:
假设我正在开发一些功能,开发需要几天时间。因此,我创建了分支 MyFeature,检查它,并提交了一些东西。由于工作需要好几天,我不想把它放在我的本地机器上,所以为了备份,我把这个分支推到远程。
完成工作后,我想以某种方式将其合并到母版中。
我的问题:
- 假设没有其他人永远不会签出和拉取 MyFeature 分支,并且他的工作基于该分支的提交(为什么有人想拉取一些随机分支? ), 可以重新设置这样的远程分支吗? (使用 –force 开关)
- 如果出于某种原因仍然不可取(不过我想了解那个原因)还有什么选择?简单合并?但如果是这样,之后,我仍然想从本地和远程存储库中删除 MyFeature 分支。那么它与 (1) 有何不同?我仍然通过完全删除它来改变历史。
- 上述情况是否罕见或不典型?我的意思是,在搜索此问题的答案、阅读教程和有关 git-rebase 的 SO 问题时,总是强调 rebase 远程分支的这种危险,但从未考虑过其他类似的用例。恕我直言,当天在某些功能上工作的时间更长是很常见的,我认为任何谨慎的开发人员都不应该只在他的计算机上保留更改...
非常主观。 “可以吗?”给谁?给你?给你的雇主?问他们。
至于技术可行性:
是的,没问题。
您可以合并和删除分支。我更喜欢这种方法(看到了吗?主观的),我什至使用 git merge --no-ff
这样即使合并是快进的,也会创建合并提交。删除分支不会修改历史;您只需删除分支指针,而不是提交。
另一种选择是 git merge --squash
,它将分支合并为一个提交,该提交将应用于您要合并到的分支。我不喜欢它,但有些人喜欢它。
不,这既不罕见也不典型。
On the assumption that no one else will never checkout and pull MyFeature branch, and base his work on commits from this branch (why someone would like to pull some random branch?), is it ok to rebase such remote branch?
当然,rebase
步骤不需要 --force。
你只需要它来强制推送你的分支
git checkout MyFeature
git fetch
git rebase origin/master
git push --force
只要您在上游存储库中更新自己的分支,那应该不是问题。
On the assumption that no one else will never checkout and pull MyFeature branch, and base his work on commits from this branch, is it ok to rebase such remote branch? (using –force switch)
不仅可以 rebase
并强制将您的远程功能分支推送到 master
,这是通过在维护的同时引入更改来保持领先于 master
的唯一方法线性度。当你 rebase
你的本地特性分支在另一个分支上时(比如 master
),你必须强制推送到远程,因为你已经有效地重写了历史。没有造成任何伤害的风险,因为您将是唯一在该分支机构工作的人。我认为 Git 创建的任何东西都不是天生的邪恶,每个 Git 功能都有它的时间和地点。这是可以接受用力推动的一个例子。
事实上,远程个人功能分支是唯一可以在已推送到远程的分支上使用 rebase
的实例。如前所述,您不会给其他任何人造成问题,因为只有您签出此分支。
话虽这么说,对一个被许多用户共享的 public 分支做一个 rebase
是危险的,因为这可能会在每个人进行下一次 pull 时引起冲突(除了当然是对做 rebase 的用户而言)。
在我看来,rebase 只有一个开发人员的功能分支不是问题。我的工作方式与您的工作方式完全相同,我会重新设置自己的功能分支。 git 如果所有功能分支在合并之前都重新设置基线,那么历史记录会变得更容易查看。但这当然是个人喜好。
是共享分支在变基时引起了麻烦。请在此处查看有关原因的解释:https://superuser.com/a/667200
这条规则是为了不对推送到远程存储库的提交进行变基。 只要我了解一般原因,我就不清楚,它是否也适用于这种情况:
假设我正在开发一些功能,开发需要几天时间。因此,我创建了分支 MyFeature,检查它,并提交了一些东西。由于工作需要好几天,我不想把它放在我的本地机器上,所以为了备份,我把这个分支推到远程。
完成工作后,我想以某种方式将其合并到母版中。
我的问题:
- 假设没有其他人永远不会签出和拉取 MyFeature 分支,并且他的工作基于该分支的提交(为什么有人想拉取一些随机分支? ), 可以重新设置这样的远程分支吗? (使用 –force 开关)
- 如果出于某种原因仍然不可取(不过我想了解那个原因)还有什么选择?简单合并?但如果是这样,之后,我仍然想从本地和远程存储库中删除 MyFeature 分支。那么它与 (1) 有何不同?我仍然通过完全删除它来改变历史。
- 上述情况是否罕见或不典型?我的意思是,在搜索此问题的答案、阅读教程和有关 git-rebase 的 SO 问题时,总是强调 rebase 远程分支的这种危险,但从未考虑过其他类似的用例。恕我直言,当天在某些功能上工作的时间更长是很常见的,我认为任何谨慎的开发人员都不应该只在他的计算机上保留更改...
非常主观。 “可以吗?”给谁?给你?给你的雇主?问他们。
至于技术可行性:
是的,没问题。
您可以合并和删除分支。我更喜欢这种方法(看到了吗?主观的),我什至使用
git merge --no-ff
这样即使合并是快进的,也会创建合并提交。删除分支不会修改历史;您只需删除分支指针,而不是提交。另一种选择是
git merge --squash
,它将分支合并为一个提交,该提交将应用于您要合并到的分支。我不喜欢它,但有些人喜欢它。不,这既不罕见也不典型。
On the assumption that no one else will never checkout and pull MyFeature branch, and base his work on commits from this branch (why someone would like to pull some random branch?), is it ok to rebase such remote branch?
当然,rebase
步骤不需要 --force。
你只需要它来强制推送你的分支
git checkout MyFeature
git fetch
git rebase origin/master
git push --force
只要您在上游存储库中更新自己的分支,那应该不是问题。
On the assumption that no one else will never checkout and pull MyFeature branch, and base his work on commits from this branch, is it ok to rebase such remote branch? (using –force switch)
不仅可以 rebase
并强制将您的远程功能分支推送到 master
,这是通过在维护的同时引入更改来保持领先于 master
的唯一方法线性度。当你 rebase
你的本地特性分支在另一个分支上时(比如 master
),你必须强制推送到远程,因为你已经有效地重写了历史。没有造成任何伤害的风险,因为您将是唯一在该分支机构工作的人。我认为 Git 创建的任何东西都不是天生的邪恶,每个 Git 功能都有它的时间和地点。这是可以接受用力推动的一个例子。
事实上,远程个人功能分支是唯一可以在已推送到远程的分支上使用 rebase
的实例。如前所述,您不会给其他任何人造成问题,因为只有您签出此分支。
话虽这么说,对一个被许多用户共享的 public 分支做一个 rebase
是危险的,因为这可能会在每个人进行下一次 pull 时引起冲突(除了当然是对做 rebase 的用户而言)。
在我看来,rebase 只有一个开发人员的功能分支不是问题。我的工作方式与您的工作方式完全相同,我会重新设置自己的功能分支。 git 如果所有功能分支在合并之前都重新设置基线,那么历史记录会变得更容易查看。但这当然是个人喜好。
是共享分支在变基时引起了麻烦。请在此处查看有关原因的解释:https://superuser.com/a/667200