Git 无法将新文件添加到远程回购,说我需要拉,但已经拉了

Git 无法将新文件添加到远程回购,说我需要拉,但已经拉了,git,bitbucket,git-push,git-pull,Git,Bitbucket,Git Push,Git Pull,对于一个只有我自己创建代码的个人项目,我有时会在两个不同的IDE之间切换。因此,源代码本地存储在两个不同的位置。我想要Bitbucket上代码的历史记录/备份。Git能够处理这个问题吗 我在源代码目录中有foo.cpp。我不想把远程回购的所有内容都复制到源代码中。添加并提交foo.cpp后,我尝试运行git push origin master,它给出了错误 ! [rejected] master -> master (fetch first) error: failed

对于一个只有我自己创建代码的个人项目,我有时会在两个不同的IDE之间切换。因此,源代码本地存储在两个不同的位置。我想要Bitbucket上代码的历史记录/备份。Git能够处理这个问题吗

我在源代码目录中有foo.cpp。我不想把远程回购的所有内容都复制到源代码中。添加并提交foo.cpp后,我尝试运行git push origin master,它给出了错误

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://bitbucket.org/...'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first 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.
就像它推荐的那样,我做git拉原始主机,但它会出错

error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
Bitbucket版本的foo2.cpp是正确的,所以我删除了本地版本,然后运行$git restore-staged foo2.cpp,这很有效。现在git拉原版大师作品。但我还是推不动

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://bitbucket.org/...'
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.
同样,我要做的就是在远程repo的主分支中添加一个文件。撇开不谈,远程回购(remote repo)是指托管服务(如Bitbucket)上的特定项目的正确术语吗

它还说master | REBASE 2/3,我不知道这是什么意思。

本地和远程回购必须有相同的文件才能提交 您的第一个问题的答案是,是的,Git可以处理多个本地回购-但您似乎没有按照设计使用Git的方式使用Git-因此很难帮助您解决此问题,或者如果您想使用Git来解决此问题,至少您最好更改您的工作流程

让我解释一下:

我在源代码目录中有foo.cpp。我不想把远程回购的所有内容都复制到源代码中

我假设远程回购是指远程服务器上的回购,即Bitbucket。在Git中,不存在拥有远程repo的本地副本,而该远程repo在给定的提交中具有更少的文件。克隆Git repo时,将获得所有文件。事实上,通常情况下,所有文件都包含所有提交/历史记录。这实际上就是Git对所有文件进行版本控制的要点,因此您可以从任何PC上的任何提交重新创建所有文件的精确副本

如果您只想在repo中更新foo.cpp,只需更改foo.cpp,将其添加到索引中,然后将其推回到远程。新提交仍将包含所有其他文件,在新提交中仅更改了foo.cpp

如何摆脱目前的局面? 您可以通过在本地回购中硬重置到最新提交来摆脱重设基础/合并。这将使事情重新开始。但我不认为你能像你所希望的那样工作,并且保持事情的同步

当您获取并尝试重定基址、快进或合并时,如果您删除文件,Git会感到困惑,因为您不希望这些文件出现在本地回购中,但它们存在于远程,因此您会收到错误

多重本地回购? 我不知道为什么您希望为不同的IDE提供不同的本地回购,但如果确实需要,您可以这样做。只需将repo克隆两次到不同的目录中

只要意识到,无论何时你从一个本地人推到远程,它看起来就像是从另一个repo推到远程的另一个用户。您将需要获取这些更改并快速前进/合并git pull是另一个本地repo中git fetch和git merge的组合,以合并它们。如果单独更新两个本地回购协议,如果它们编辑相同的文件,则最终会出现合并冲突。然而,如果你总是在回购协议之间进行交接,从一个回购协议向上推,然后在另一个回购协议之前向下推,那就永远不会发生

考虑只使用一个本地回购或多个远程回购 然而,我想问一下,为什么您希望针对不同的IDE在本地进行两次单独的回购。我真的会检查你这样设置的理由-可能有更好的工作流程

您应该能够创建一个本地repo,其中包含任一IDE所需的所有文件。如果您真的需要不同的文件,需要单独管理它们,请考虑对它们进行完全分开的处理。有多种技术可用于在两个repo之间共享公共文件,例如第三个repo的子模块,作为具有公共文件的库

我们需要更多关于在同一回购协议中使用两个独立IDE的目的的细节,以回答如何使用Git实现这一点的最佳实践。例如,一个用于开发,另一个用于发布?这将是一个很好的独立StackOverflow问题…

本地和远程回购必须具有相同的文件才能提交 您的第一个问题的答案是,是的,Git可以处理多个本地回购-但您似乎没有按照设计使用Git的方式使用Git-因此很难帮助您解决此问题,或者如果您想使用Git来解决此问题,至少您最好更改您的工作流程

让我解释一下:

I h 源代码目录中的ave foo.cpp。我不想把远程回购的所有内容都复制到源代码中

我假设远程回购是指远程服务器上的回购,即Bitbucket。在Git中,不存在拥有远程repo的本地副本,而该远程repo在给定的提交中具有更少的文件。克隆Git repo时,将获得所有文件。事实上,通常情况下,所有文件都包含所有提交/历史记录。这实际上就是Git对所有文件进行版本控制的要点,因此您可以从任何PC上的任何提交重新创建所有文件的精确副本

如果您只想在repo中更新foo.cpp,只需更改foo.cpp,将其添加到索引中,然后将其推回到远程。新提交仍将包含所有其他文件,在新提交中仅更改了foo.cpp

如何摆脱目前的局面? 您可以通过在本地回购中硬重置到最新提交来摆脱重设基础/合并。这将使事情重新开始。但我不认为你能像你所希望的那样工作,并且保持事情的同步

当您获取并尝试重定基址、快进或合并时,如果您删除文件,Git会感到困惑,因为您不希望这些文件出现在本地回购中,但它们存在于远程,因此您会收到错误

多重本地回购? 我不知道为什么您希望为不同的IDE提供不同的本地回购,但如果确实需要,您可以这样做。只需将repo克隆两次到不同的目录中

只要意识到,无论何时你从一个本地人推到远程,它看起来就像是从另一个repo推到远程的另一个用户。您将需要获取这些更改并快速前进/合并git pull是另一个本地repo中git fetch和git merge的组合,以合并它们。如果单独更新两个本地回购协议,如果它们编辑相同的文件,则最终会出现合并冲突。然而,如果你总是在回购协议之间进行交接,从一个回购协议向上推,然后在另一个回购协议之前向下推,那就永远不会发生

考虑只使用一个本地回购或多个远程回购 然而,我想问一下,为什么您希望针对不同的IDE在本地进行两次单独的回购。我真的会检查你这样设置的理由-可能有更好的工作流程

您应该能够创建一个本地repo,其中包含任一IDE所需的所有文件。如果您真的需要不同的文件,需要单独管理它们,请考虑对它们进行完全分开的处理。有多种技术可用于在两个repo之间共享公共文件,例如第三个repo的子模块,作为具有公共文件的库

我们需要更多关于在同一回购协议中使用两个独立IDE的目的的细节,以回答如何使用Git实现这一点的最佳实践。例如,一个用于开发,另一个用于发布?这将是一个很好的单独堆栈溢出问题…

Git很好

Git非常努力地确保基线和基线历史的完整性

你刚才有一个,我很抱歉地说:

你还提出了几个好问题:

Q1:使用IDE开发是正常的。我使用Netbeans。大多数人是否在这个位置安装git,即他们是否进入项目目录并运行git init

简短回答:您通常会让IDE为您创建本地回购协议

问题2:在不确定每个命令的作用的情况下,在重要文件上使用Git太危险了。如何安全地学习它

简短回答:尝试一些helloworld项目和一个好的Git教程;您可以随时备份项目的副本

建议:

在IDE中使用Git:

无论如何,请使用您的IDE,例如Netbeans。我碰巧主要使用Eclipse for Java和MSV for Windows。 我将在IDE中创建您的项目并初始化Git。 假设您在Windows上,我还将下载并安装以下两项之一: 您会发现,您可以将这些Git客户机中的任何一个以任意组合的方式用于您的工作。 Git完全不知道您使用哪些客户端

一旦您启动了一个项目并下载了一个或两个其他Git客户机,请浏览到您的项目目录,并确信他们看到的都是相同的东西

熟悉一些基本的Git工作流

一旦你创建了你的项目,找到一个好的教程并开始使用Git特性。本地和/或使用Github或BitBucket

签入、签出、推、拉、硬重置、创建分支、合并分支等

道路上的每一步。。。cd到项目的物理目录。。。然后再复制一份。一旦你获得信心,你会发现这个额外的备份是不必要的。在此之前,它可以成为救命稻草:

时刻记住这一点 无论何时、出于何种原因,只要您拥有隐藏的.git子目录,您就可以随时恢复最新提交:

git重置-硬

“希望这有帮助……”Git很好

Git非常努力地确保基线和基线历史的完整性

你刚才有一个,我很抱歉地说:

你还提出了几个好问题:

Q1:使用IDE开发是正常的。我使用Netbeans。大多数人是否在这个位置安装git,即他们是否进入项目目录并运行git init

简短回答:您通常会让IDE为您创建本地回购协议

问题2:在不确定每个命令的作用的情况下,在重要文件上使用Git太危险了。如何安全地学习它

简短回答:尝试一些helloworld项目和一个好的Git教程;您可以随时备份项目的副本

建议:

在IDE中使用Git:

无论如何,请使用您的IDE,例如Netbeans。我碰巧主要使用Eclipse for Java和MSV for Windows。 我将在IDE中创建您的项目并初始化Git。 假设您在Windows上,我还将下载并安装以下两项之一: 您会发现,您可以将这些Git客户机中的任何一个以任意组合的方式用于您的工作。 Git完全不知道您使用哪些客户端

一旦您启动了一个项目并下载了一个或两个其他Git客户机,请浏览到您的项目目录,并确信他们看到的都是相同的东西

熟悉一些基本的Git工作流

一旦你创建了你的项目,找到一个好的教程并开始使用Git特性。本地和/或使用Github或BitBucket

签入、签出、推、拉、硬重置、创建分支、合并分支等

道路上的每一步。。。cd到项目的物理目录。。。然后再复制一份。一旦你获得信心,你会发现这个额外的备份是不必要的。在此之前,它可以成为救命稻草:

请始终记住,无论何时出于何种原因,只要您拥有隐藏的.git子目录,就可以随时恢复最新提交:

git重置-硬


<希望>有助于…

如果你仍然处于一个重新基础操作的中间,运行Git ReBase-继续恢复ReBase.DeNN确保你不重置以前从主推的提交。你的意思是你在两个不同的地方存储在两个IDE之间切换?这是否意味着您在本地有两份回购协议副本,每个IDE一份?问:说我需要拉,但已经拉了。。。答:它说的正是它的意思:你的遥控器与你的本地repo不同步:LightCC给出了一个很好的回答。如果你觉得有用,请一定要投票并接受。更重要的是:请务必阅读。请相应地调整您的密码。如果您还有其他问题,请发回。@LightCC我的意思是,我在大多数代码中使用了一个很重的IDE,但有时在小驱动程序/实验中更喜欢使用Notepad++。从记事本++中创建的文件与IDE创建的文件不同。如果您仍然处于ReBASE操作的中间,则运行Git ReBase-继续恢复ReBASE。请确保您并没有对以前从master推送的提交进行重定基址。您在本地存储在两个不同位置的两个IDE之间切换是什么意思?这是否意味着您在本地有两份回购协议副本,每个IDE一份?问:说我需要拉,但已经拉了。。。答:它说的正是它的意思:你的遥控器与你的本地repo不同步:LightCC给出了一个很好的回答。如果你觉得有用,请一定要投票并接受。更重要的是:请务必阅读。请相应地调整您的密码。如果您还有其他问题,请发回。@LightCC我的意思是,我在大多数代码中使用了一个很重的IDE,但有时在小驱动程序/实验中更喜欢使用Notepad++。从Notepad++创建的文件与IDE创建的文件位于不同的目录中。不存在远程repo的本地副本对于给定的提交文件较少的情况。本地repo是否可以在两个目录之间拆分,因此,它们的组合文件将在给定的提交中包含所有文件?我的意思是,我知道我可以通过进入Bitbucket的web界面并在那里添加foo.cpp来手动解决此问题。不,这不是git的目的。您所描述的是两种不同的回购协议。如果文件相同,您可以在本地共享,或者正式地,您可以为共享的内容创建单独的repo,并将其作为两个repo中的一个子模块。或者你可以在不同的分支中使用不同的文件来破解它。当它们只是原型/实验时,这可能更好。。。i、 e.如果是临时情况,则使用分支机构,如果是永久性的,则使用另一个回购。没有ha这样的东西
保存一个远程repo的本地副本,该副本在一个给定的提交中具有较少的文件。本地repo可以在两个目录之间拆分,以便来自这两个目录的组合文件将具有给定提交中的所有文件?我的意思是,我知道我可以通过进入Bitbucket的web界面并在那里添加foo.cpp手动解决此问题。不,这不是git的目的。您所描述的是两种不同的回购协议。如果文件相同,您可以在本地共享,或者正式地,您可以为共享的内容创建单独的repo,并将其作为两个repo中的一个子模块。或者你可以在不同的分支中使用不同的文件来破解它。当它们只是原型/实验时,这可能更好。。。i、 如果是临时情况,请使用分支,如果是永久情况,请使用另一个repo。您的意思是,在IDE中使用内置的Git功能是很常见的,并且在相同的文件上也使用Git客户端?我理解正确吗?是的,这正是我要说的。实际上,这意味着您可以使用IDE的内置工具,从而节省一些按键,并遵守IDE鼓励的任何约定,但是b您可以根据需要随时使用其他Git客户端:我还建议您可以也应该学习一些教程,并做一些实验,以便更好地熟悉Git的工作原理。。。以免你经历另一系列不幸事件;如果我有一个git正在跟踪的文件夹,例如运行git init,将其拖放到另一个位置是否安全?或者这会破坏git吗?git回购所需的一切都包含在隐藏文件夹.git中。因此,是的,您可以安全地拖放目录,例如MyProject。。。只要您还确保包含.git子目录,您要说的是,在IDE中使用内置的git功能以及在相同的文件上使用git客户端是很常见的?我理解正确吗?是的,这正是我要说的。实际上,这意味着您可以使用IDE的内置工具,从而节省一些按键,并遵守IDE鼓励的任何约定,但是b您可以根据需要随时使用其他Git客户端:我还建议您可以也应该学习一些教程,并做一些实验,以便更好地熟悉Git的工作原理。。。以免你经历另一系列不幸事件;如果我有一个git正在跟踪的文件夹,例如运行git init,将其拖放到另一个位置是否安全?或者这会破坏git吗?git回购所需的一切都包含在隐藏文件夹.git中。因此,是的,您可以安全地拖放目录,例如MyProject。。。只要您还确保包含.git子目录。
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://bitbucket.org/...'
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.