无法将新文件添加到远程仓库,说我需要拉但已经做了

Can't add new file to remote repo, says I need to pull but already did

对于一个只有我一个人编写代码的个人项目,我有时会在两个不同的 IDE 之间切换。因此,源代码本地存储在两个不同的地方。我想要 Bitbucket 上的代码 history/backup。 Git 可以处理吗?

我在目录 source_code 中有 foo.cpp。我不想将远程仓库中的所有内容复制到 source_code。添加并提交 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 pull origin master 但它出错

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.

在这种情况下,未合并到底是什么意思?我如何才能具体找到问题所在的文件?我猜问题是我有同名文件,但我只想从目录中跟踪一个特定文件。如此简单的任务我希望很容易。

当我执行 git status 时,它会给出

You are currently rebasing branch 'master' on '930b2f7'.
  (fix conflicts and then run "git rebase --continue")
  (use "git rebase --skip" to skip this patch)
  (use "git rebase --abort" to check out the original branch)

Unmerged paths:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
        both added:      foo2.cpp

Bitbucket 的 foo2.cpp 版本是正确的,所以我删除了本地 one.I 然后 运行 $ git restore --staged foo2.cpp 有效。现在 git pull origin master 有效。但是我还是推不开。

 ! [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.

同样,我要做的就是向远程仓库上的主 b运行ch 添加一个文件。 (此外,“远程回购”甚至是用来指代 Bitbucket 等托管服务上的特定项目的正确术语吗?)

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

本地和远程存储库必须具有相同的提交文件

您的第一个问题的答案是,Git 可以处理多个本地存储库 - 但您似乎没有按照设计使用的方式使用 Git - 所以它将很难帮助您解决此问题,或者至少如果您想使用 Git.

来更改您的工作流程会更好

让我解释一下:

I have foo.cpp in the directory source_code. I do not want to copy everything from the remote repo into source_code.

我假设“远程回购”是指远程服务器上的回购 - 即 Bitbucket。在 Git 中,对于给定的提交,不存在具有较少文件的远程存储库的本地副本。当您克隆 Git 存储库时,您将获得所有文件。实际上,通常情况下,所有文件都带有 commits/history。这实际上是 Git 的重点 - 对所有文件进行版本控制,因此您可以从任何 PC 上的任何提交重新创建所有文件的精确副本。

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



如何摆脱现状?

您可以通过硬重置到本地存储库中的最新提交来退出 rebase/merge。这将重置一切以重新开始。但我不认为你可以随心所欲地工作并保持同步。

当您获取并尝试变基、快进或合并时,如果您删除文件,Git 会感到困惑,因为您不希望它们出现在本地存储库中,但它们存在于远程存储库中- 因此你得到的错误



多个本地存储库?

我不确定您为什么要为不同的 IDE 使用不同的本地存储库,但如果确实需要,您可以这样做。只需将 repo 克隆两次到不同的目录中。

只需意识到,每当您从一个本地人推送到远程时,它看起来就像另一个用户从另一个仓库推送到远程一样。您将需要在其他本地存储库中获取这些更改和 fastforward/merge(git 拉动是 git fetchgit merge 的组合)以合并它们。如果您独立更新两个本地存储库,如果它们编辑相同的文件,您最终将以合并冲突告终。但是,如果您总是通过从一个上推,然后在处理另一个之前下拉,在回购协议之间“交接”,那永远不会发生。



考虑只使用一个本地存储库(或多个远程存储库)

但是,我想问为什么你会想要两个单独的本地存储库,用于“不同的 IDEs”。我真的会检查你以这种方式设置事情的理由 - 可能会有更好的工作流程。

您应该能够处理一个本地存储库,其中包含 IDE 所需的所有文件。如果您确实需要不同的文件并且需要单独管理它们,请考虑为它们制作完全独立的 repos。有多种技术可用于在两个 repos 之间共享公共文件,例如第三个 repo 的子模块作为具有公共文件的库。

我们需要更多关于在同一个存储库中使用两个单独的 IDE 的目的的详细信息,以便给出有关如何使用 Git 实现该目的的最佳实践的答案。例如,一个设置用于开发,另一个用于发布? (那将是一个很好的独立 Whosebug 问题...)

Git 很好。

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

你刚刚有一个Series of Unfortunate Events,我很遗憾地说:(

您还提出了几个很好的问题:

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

    简短回答:您通常会让 IDE 为您创建本地存储库

  • Q2:Git 太危险了,不能在不确定每个命令的作用的情况下对重要文件使用。如何安全地学习它?

    简短回答:尝试一些“hello world”项目和一个很好的 Git 教程;您可以随时为您的项目制作备份副本。

建议:

  1. 将 Git 与您的 IDE 一起使用:

    • 无论如何,请使用您的 IDE(例如 Netbeans)。我碰巧主要将 Eclipse 用于 Java,将 MSVS 用于 Windows)。
    • 我会创建您的项目并初始化 Git,全部在 IDE。
    • 假设您使用 Windows,我还会下载并安装 either/both 的:
    • 您会发现,您可以将这些 Git 客户端中的 ANYANY 组合方式用于您的工作.
  2. Git 完全不知道您使用的是哪个客户端。

    一旦您启动了一个项目并下载了一个或两个“其他”Git 客户端,浏览到您的项目目录并让自己满意他们都“看到了同样的东西”。

  3. 熟悉一些基本的 Git 工作流程

    • 创建项目后,找一个好的教程并开始使用 Git 功能。在本地,and/or 使用 Github 或 BitBucket。

    • Checkin, checkout, push, pull, "reset --hard", create branches, merge branches等等

    • 方法的每一步...“cd”到项目的物理目录...并制作第二个副本。一旦你有了信心,你就会发现这种“额外的备份”是不必要的。在那之前,它可以成为救星:)

    • 永远记住,在任何时候,无论出于何种原因,只要你有隐藏的“.git”子目录,你就可以随时恢复最新的提交:

      git reset --hard

'希望对您有所帮助...