git push -u和git push -f之间的区别?

时间:2019-03-18 01:55:47

标签: git github push commit

我知道在提交之后进行了一次推送,但是在使用命令“ git push -u origin master”之后,我仍然遇到错误。该错误的内容如下:

! [拒绝]管理员->管理员(非快进) 错误:无法将某些引用推送到'https://github.com/。 。 。” 提示:更新被拒绝,因为当前分支的尖端在后面 提示:它的远程副本。集成远程更改(例如 提示:“ git pull ...”),然后再次按下。 提示:有关详细信息,请参见“ git push --help”中的“关于快进的注意事项”。

然后我使用了“ git push -f origin master”,该命令起作用了。那么,这里有什么区别?我对文档不了解,视频也没有帮助。

4 个答案:

答案 0 :(得分:1)

错误消息已经提示您:

远程有一些额外的更改,您需要将更改放入自己的存储库中,在其上添加更改,然后推送。

说明问题:

从此开始:

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

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

您在本地进行了一些更改,而其他人在远程进行了一些更改

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

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

试想一下,如果将更改推送到远程,远程将是什么样? Git不会为您猜测它,因此您需要在本地处理它,平滑所有内容,然后按:

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分支是remote的master的后代,因此它可以让您进行推送。

如果您改用push -f,则只需强制遥控器拿走[master],在上述情况下,遥控器的主人将成为您的X提交者,并提交{{1 }}和D将丢失。通常这是您不需要的东西,尤其是master分支。

答案 1 :(得分:0)

通过消息提交更改

git commit -m "Your commit message here"

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

git push -u origin master

答案 2 :(得分:0)

下一步是确认您的更改。 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

答案 3 :(得分:0)

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

git add .
git push

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

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