Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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,在Git中,我有时在长时间运行的分支上工作。我喜欢时不时地在master上重新设置基础,以便在我准备好时更容易合并 重定基址后,我无法将以前推送的分支推送到远程,因为我的分支的历史记录不再与远程分支的历史记录一致。所以我必须先删除它 这是我当前的工作流程: git checkout my_branch git rebase master git push origin :my_branch # Delete remote version of the branch git push origi

在Git中,我有时在长时间运行的分支上工作。我喜欢时不时地在master上重新设置基础,以便在我准备好时更容易合并

重定基址后,我无法将以前推送的分支推送到远程,因为我的分支的历史记录不再与远程分支的历史记录一致。所以我必须先删除它

这是我当前的工作流程:

git checkout my_branch
git rebase master
git push origin :my_branch  # Delete remote version of the branch
git push origin my_branch   # Push up my new version of history on this branch

是否有一个原子命令可以替代最后两个命令?

如果允许您重写远程分支,您可以使用
git push--force my_remote my_branch

没错,
git push-f
在示例中是合适的

原因是不需要重新创建整个分支,因为所有提交的预重基保持不变

我们只需要将新的重定基本机提交覆盖到包含非重定基旧提交的远程回购


在我类似的用例中,
git push-f
不可行,因为我的远程回购被错误地删除了,所以我很容易:

git创建我的分支
git-push-f

我不知道你不能推重定基础的分支。谁知道为什么?!重新设置基础似乎是一种相当常见的操作,为什么它“不起作用”?引用“重新设置你已经推到远程回购的承诺的基础被认为是不好的做法。这样做可能会引起git神的愤怒……你已经被警告过了。”@Stefan,哦,“好的老git合并,那对我来说就是了。”Shahbaz-git有“瓷器”和“管道”命令的概念,前者是由后者构建的。例如,
git pull
实际上是
fetch
merge
的组合。我想推压是类似的
merge
rebase
不兼容,因为
merge
是查找常见提交并添加缺少的提交
rebase
在这种情况下意味着分支的两个副本在从
master
@Stefan分离之前没有任何共同的历史记录-我永远不会在master上尝试这一点,但在我的团队中,我们经常有“个人”分支,其他人不会处理;它们基本上是我们工作的备份,以防大楼被烧毁。这将解决问题,但斯特凡走上了正确的道路。对已经推送到远程服务器的提交进行重定基址通常不是一个好做法。好吧,如果你是唯一一个在该分支上工作的人,那可能没关系。@Stefan-这正是我的情况;这是我的独家分店。否则我不会这么做。同样效果的替代语法是
git push origin+my_branch
。“+”表示可以覆盖目标分支。@twalberg我知道
+
语法,但我总是觉得它有点晦涩难懂,更喜欢
--force
的冗长。