Linux 错误:无法将某些引用推送到';git@github.com:<;名称>/&书信电报;项目>;。吉特';

Linux 错误:无法将某些引用推送到';git@github.com:<;名称>/&书信电报;项目>;。吉特';,linux,git,github,Linux,Git,Github,嗨,我是一个使用git的新手,我读了一些关于这个错误的StackOverflow Q&a,但不明白我的问题是如何与具有相同错误消息的其他人联系在一起的。所以我不敢冒险,浪费了6个小时的工作,我需要把这些工作推到我的远程GitHub repo上 1.)开头 因此,我在本地工作目录中的代码被破坏,我无法找出问题所在。所以我想让git回到我项目的最新工作版本。然后我找到了这个教程,并设法让我的本地项目返回到一个工作版本。 3.)错误 我不明白错误消息试图告诉我什么。有人能帮我展示一下我需要运行哪

嗨,我是一个使用git的新手,我读了一些关于这个错误的StackOverflow Q&a,但不明白我的问题是如何与具有相同错误消息的其他人联系在一起的。所以我不敢冒险,浪费了6个小时的工作,我需要把这些工作推到我的远程GitHub repo上

1.)开头

因此,我在本地工作目录中的代码被破坏,我无法找出问题所在。所以我想让git回到我项目的最新工作版本。然后我找到了这个教程,并设法让我的本地项目返回到一个工作版本。

3.)错误

我不明白错误消息试图告诉我什么。有人能帮我展示一下我需要运行哪些命令序列才能像往常一样推送代码吗

penguin@linux$ git push origin master

To git@github.com:<name>/<project>.git

 ! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:<name>/<project>.git'

hint: Updates were rejected because a pushed branch tip is behind its remote 
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
penguin@linux$git推送原始主机
到git@github.com:/.git
! [已拒绝]主控->主控(非快进)错误:无法将某些引用推送到'git@github.com:/.git'
提示:更新被拒绝,因为推送的分支提示位于其远程端口的后面
提示:对应。签出此分支并集成远程更改
提示:(例如“git pull…”)然后再推。
提示:有关详细信息,请参阅“git push--help”中的“关于快进的说明”。

git清楚地提到,您的工作所在的当前分支未使用远程存储库进行更新,因为其他人已将其代码提交到该存储库

首先,您需要提取远程存储库,然后提交代码

注意:这里的来源是您需要的远程存储库位置 可能会加上

考虑到你在master branch的工作

git pull origin master  /* To update with the remote repository */

git push origin master /* To push your updated code */

让我们谈谈这个相当长的评论(我应该在另一个评论中这样做,但这根本不合适,所以我要回答一个不同的问题,即“分离和重新连接头部如何工作”):


Tnx torek我通过你提供的链接成功地消除了这个错误。我也有一些超脱头部的问题,我通过跟随Razan Paul在这里的帖子摆脱了这些问题,但是在超脱头部模式下的所有更改在修复后都丢失了。我有副本,所以我可以手动重新创建它们。因此,将来当我想返回到本地工作目录上的最新工作版本时。什么程序最适合我的情况?我看到这么多不同的建议,我不知道什么对我最好

(顺便说一句,当向特定的人发表评论时,您可能希望使用
@
语法,以便他们得到提醒)

你需要的是一本合适的Git书。在我看来,最好的免费软件是。(如果有的话,也没有多少其他免费的,所以“最好的”在这里完全是真的。:-)我觉得有帮助的一个简短的非书籍参考是,因为Git是建立在一些非常简单的图论之上的,但除非你知道这一点,直到你意识到这一点,否则你就会陷入困境

(我甚至做过,但这些天我几乎没有时间做这件事。)

在Git中可以使用许多工作流。不过,首先要记住的是Git的“存储单元”,因为它是Git极力想要保护的东西,所以您可以将其取回的是提交。这就是为什么你推不动的原因:你在告诉另一个Git:扔掉一些提交。Git不想这样做

提交由其哈希ID唯一标识。这些散列ID对人类不是很有用,所以Git给我们提供了诸如分支名称之类的东西来记住特定的ID,但在某些情况下,您可能不得不求助于原始ID,例如,您可以用鼠标剪切和粘贴原始ID

Git希望保留提交,这意味着当您使用分离的头进行提交时,Git也会尝试保留这些提交。默认情况下,它将这样做至少30天。您可以使用
git reflog
找到散列ID。如果使用
git reset--hard
使git“忘记”在分支(而不是分离的头)上的提交,git也会在分支名称的reflog上保留这些id至少30天。每个分支名称都有一个reflog,而
HEAD
本身也有一个reflog

最后,当你在某个特定的分支上时,
git status
会说,“在”某个特定的分支上,连接的头与分离的头相对应:

$ git status
On branch master
...
在本例中,分支名称
master
是Git实际识别您现在签出的提交的方式;而名称
仅附加到名称

为了使这一切正常工作,Git向后工作

图形简介 要真正理解这一切意味着什么,您需要绘制提交图。请记住,每个提交都有自己独特的哈希ID,即那些长40个字符的十六进制大字符串,如
5be1f00a9a701532232f57958efab4be8c959a29
——但这有点不合适,因此您可能希望在小图形中只使用单个字母:

A <-B <-C   <--master
Git在这里的最后一步是更改名称
master
,以便它保存commit
D
的散列ID,这给了我们以下图片:

A <-B <-C <-D   <--master
这是理解Git的另一个关键点:分支名称会随着时间的推移而移动。分支获得新的提交,并且名称指向分支上的最后一次提交,Git称之为提示提交。Git使用此提示提交来查找该分支的下一个较早的提交:提示的父级。Git使用该提交查找其上一次提交,以此类推,一直返回到根提交

名称
HEAD
通常只标识分支名称 让我们通过添加一个来自
C
的分支来使上述存储库复杂化:

A <-B <-C <-D
A--B--C--D   <-- master
       \
        E   <-- develop
正如
git status
所说,我们将在分支主机上执行
;如果我们现在创建一个新的提交<代码> f<代码>,它的PAR
A <-B <-C <-D   <--master
A--B--C--D   <-- master
A--B--C--D   <-- master
       \
        E   <-- develop
git checkout master
A--B--C--D   <-- master (HEAD)
       \
        E   <-- develop
A--B--C--D   <-- master
       \
        E   <-- develop (HEAD)
A--B   <-- HEAD
    \
     C--D   <-- master
      \
       E   <-- develop
A--B--F   <-- HEAD
    \
     C--D   <-- master
      \
       E   <-- develop
A--B--F   <-- ???
    \
     C--D   <-- master (HEAD)
      \
       E   <-- develop
A--B--F   <-- newbranch
    \
     C--D   <-- master (HEAD)
      \
       E   <-- develop
        G   <-- newbranch
       /
A--B--F
    \
     C--D   <-- master (HEAD)
      \
       E   <-- develop
        G   <-- ???
       /
A--B--F   <-- newbranch
    \
     C--D   <-- master (HEAD)
      \
       E   <-- develop