【问题标题】:Difference between git push -u and git push -f? [closed]git push -u 和 git push -f 的区别? [关闭]
【发布时间】:2019-08-08 08:59:38
【问题描述】:

我知道推送是在提交之后,但是在我使用命令“git push -u origin master”之后我继续收到错误。错误内容如下:

! [拒绝] master -> master(非快进) 错误:未能将一些参考推送到 'https://github.com/ 。 . 。 提示:更新被拒绝,因为您当前分支的尖端落后 提示:它的远程对应物。集成远程更改(例如 提示:'git pull ...') 在再次推动之前。 提示:有关详细信息,请参阅“git push --help”中的“关于快进的说明”。

然后我使用了“git push -f origin master”并且该命令起作用了。那么这里有什么区别呢?我不明白文档和视频没有那么有用。

【问题讨论】:

  • 到目前为止给出的答案都是正确的,除非每次我尝试推送时都会遇到错误,可能的原因是:更新被拒绝,因为您当前分支的尖端落后于提示:它的远程对应部分。在再次推送之前集成远程更改(例如提示:'git pull ...')。提示:有关详细信息,请参阅“git push --help”中的“关于快进的说明”。 . . . .我最终使用了 Git push -f origin master 并且效果很好。那么刚刚发生了什么?
  • 提问前是否搜索过?
  • 您的问题表明缺乏搜索,这就是我问的原因。没有必要粗鲁;基本搜索应该已经为您提供了创建提交所需的命令。
  • 仍然没有得到关于 push -f 和 -u 的文档。如果您有一种愚蠢的解释方式,我将不胜感激!
  • 将远程更改拉入当前分支(主分支)。

标签: git github push commit


【解决方案1】:

错误信息已经给你提示了:

remote 中有额外的更改,您需要将更改拉入自己的 repo,添加更改,然后推送。

为了说明问题:

开头是这样的:

Remote:
             [master]
            /
A <- B <- C

Local:
             [master]
            /
A <- B <- C

你在本地做了一些改动,别人在远程做了一些改动

Remote:
                       [master]
                      /
A <- B <- C <- D <- E

Local:
                 [master]
                /
A <- B <- C <- X

想象一下,如果您将更改推送到远程,远程会是什么样子? Git不会帮你猜的,所以你需要在本地处理,把所有东西都弄平,然后push:

Remote:
                       [master]
                      /
A <- B <- C <- D <- E

Local:
                      [origin/master]
                     /
A <- B <- C <- D <- E
           ^    
            \-- X 
                 \
                   [master]

然后合并或变基:

(在合并的情况下)

                [origin/master]   [master]
                     /            /
A <- B <- C <- D <- E <--------- Y
           ^                   /
            \-- X <-----------/

(在变基的情况下)

                [origin/master]   [master]
                     /            /
A <- B <- C <- D <- E <--------- X'

在这两种情况下,它都允许你推送,因为你的本地 master 分支是远程 master 的后继分支,远程的 master 可以快进到。

如果您改用push -f,您将简单地强制远程获取您的[master],在上述情况下,远程的主控将成为您的X 提交,并且提交DE 将是丢失。通常是你不想要的东西,尤其是 master 分支。

【讨论】:

    【解决方案2】:

    通过消息提交您的更改

    git commit -m "Your commit message here"
    

    然后推送到原点(如果你已经正确配置了原点,并且如果推送到主分支。)

    git push -u origin master
    

    【讨论】:

      【解决方案3】:

      git add . 不会提交您的更改,它只会暂存它们。如果我们假设您的本地分支与远程是最新的并且您执行了:

      git add .
      git push
      

      因为您没有新的提交要推送,所以什么都不会发生。

      git push -u origin master 将尝试将名为 master 的本地分支推送到名为 origin 的远程分支。几乎可以肯定origin 已经有一个名为master 的分支,因此您实际上是在尝试替换它。如果您使用-f(强制)运行相同的命令,您将替换它。

      【讨论】:

        【解决方案4】:

        下一步是提交您的更改。 git add 刚刚将它们添加到暂存区。然后你需要提交它们,你将在其中运行git commit -m "Message when committing"。该消息将显示在您的提交消息上。然后运行git push 会将您的所有更改放入存储库。

        请参考git的文档进一步了解。

        用于将它们添加到暂存中。 https://git-scm.com/docs/git-add

        提交他们 https://git-scm.com/docs/git-commit

        推送到仓库时 https://git-scm.com/docs/git-push

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-30
          • 2015-10-26
          • 2015-12-08
          • 2017-09-21
          • 1970-01-01
          • 2021-04-13
          • 1970-01-01
          相关资源
          最近更新 更多