Git push-f在影响主机的分支上

Git push-f在影响主机的分支上,git,github,git-branch,Git,Github,Git Branch,比方说,我从master上做了一个分支,对我的分支做了一些承诺,commit1,commit2。同时,另外两个人将两个请求合并到master,因此我的分支将落后两个提交。如果我做一些更改并在我的分支上执行gitpush-f,这会删除来自master的最后两个pull请求吗 另外,是否可以查看如何使用Github从主服务器删除两个提交?是否为此保存了任何日志/历史记录? 谢谢您的回答。git push-f会获取您的本地副本,并强制将其发送到远程,无论发生什么情况。远程服务器将成为本地分支的精确副本

比方说,我从master上做了一个分支,对我的分支做了一些承诺,commit1,commit2。同时,另外两个人将两个请求合并到master,因此我的分支将落后两个提交。如果我做一些更改并在我的分支上执行gitpush-f,这会删除来自master的最后两个pull请求吗

另外,是否可以查看如何使用Github从主服务器删除两个提交?是否为此保存了任何日志/历史记录?
谢谢您的回答。

git push-f
会获取您的本地副本,并强制将其发送到远程,无论发生什么情况。远程服务器将成为本地分支的精确副本。这意味着远程分支而不是本地分支上的所有内容都将被擦除;这是无法挽回的。除非有意重新编写历史记录,否则决不能使用
-f
标志

无法“删除”提交。您只能使用'-f'重写历史记录来重写它们。因此,如果某个东西由于
-f
而消失,它将永远不会回来。它永远失去了。换句话说,无法在github中查看历史记录,因为您的历史记录已被重写


-f

——力

通常,该命令拒绝更新不是祖先的远程引用 用于覆盖它的本地引用的。还有,什么时候
--force with lease
选项被使用时,该命令拒绝更新远程引用 当前值与预期值不匹配

此标志禁用这些检查,并可能导致远程存储库 失去承诺;小心使用

请注意,
--force
适用于所有按下的参照, 因此,将其与push.default设置为匹配或与多个push一起使用 使用
remote.*配置的目标。推送
可能会覆盖其他引用
比当前分支(包括严格落后的本地引用)
他们遥远的对手)。要仅强制推送一个分支,请使用+
在refspec前面推送(例如git推送原点+master强制
推动主分支)。有关详细信息,请参阅
部分 细节


从个人经验来看,我不同意@Humdinger。如上所述,push.default设置可以更改git push的行为。例如,如果push.default=matching,git push会推送所有分支,也就是说,两端具有相同名称的所有分支都被认为是匹配的


在您的情况下,如果您有push.default=matching,并且如果您的克隆在主分支后面有两次提交,那么您将覆盖主分支以及远程分支(假设branch!=master),即使您只是想在分支上推送更改。使用push.default=upstream应该可以避免这个问题

不,推送分支不会影响master,即使您使用-f。

我明白了,本地副本指的是所有内容,而不仅仅是它所执行的分支?谢谢@没有,只有树枝。(除非该分支是主分支)不知何故,对我来说,即使我在一个落后2次提交的分支上按了git-f,主分支的2次提交也消失了。如果不是这个,你知道还有什么可能导致它吗?@Tad它仍然可能是
-f
标记,因为force也可以更改引用。用力会导致一些严重的奇怪行为。我在规范中的回答中添加了一个注释。注意最后一段提到的,
-f
覆盖了参考。如果你落后两次,那就意味着你重写了那些承诺。您应该在使用强制推送覆盖远程之前重新设置分支的基础…不知道推送。默认值=匹配设置。谢谢你的信息。