【问题标题】:git status (nothing to commit, working directory clean), however with changes commitedgit status (没有提交,工作目录干净),但是已经提交了更改
【发布时间】:2016-09-13 03:30:40
【问题描述】:

我发现了许多类似主题的问题,但我没有找到任何关于这个问题的实用指导:为什么git status 通知我nothing to commit, working directory clean,即使我在当地的分支机构进行了修改?

以下是我遵循的步骤:

  • git init [在分支 master - 初始提交,没有提交(创建/复制文件并使用“git add”跟踪)]
  • git remote add https://github.com/username/project.git
  • git pull origin master
  • touch test
  • git add test
  • git commit -m "Adding file for test purposes only."
  • git status [在分支 master - 没有提交,工作目录干净]

如果我执行git push,则修改将提交到远程分支。我只是想在修改后执行“git status”,并接收我在本地分支上发生的更改必须推送到项目的远程分支的信息。

谁能告诉我发生了什么?请直接开门见山。

在此先感谢 SO 社区!

【问题讨论】:

  • 错误信息告诉你没有什么要提交的,因为你刚刚做了一个提交。但是,您的本地分支现在在您最初执行git pull 的远程提交之前。您可以通过将远程分支与您的更改合并或快速转发来解决此问题。
  • 您的工作目录干净的,因为每次更改都已提交。您正在寻找的是本地存储库和远程源之间的区别。所以你可能想做git loggit diff master origin/master(或者你所在的分支而不是master)

标签: git github git-commit


【解决方案1】:

您的本地分支不知道远程分支。如果你不告诉 git 你的本地分支(ma​​ster)应该与远程分支(在这种情况下为origin/master)进行比较;那么git status 不会告诉您分支和远程分支之间的区别。所以你应该使用:

git branch --set-upstream-to origin/master

或使用短选项:

git branch -u origin/master

这个选项--set-upstream-to(或简称-u)是在git 1.8.0中引入的。

一旦你设置了这个选项; git status 将向您显示类似的内容:

# Your branch is ahead of 'origin/master' by 1 commit.

【讨论】:

  • 完美,克里斯!无话可说。太感谢了!睡觉前我在想这个,但我不确定。这个解释很有意义:)。
  • 报错怎么办·请求的上游分支'origin/master'不存在·?
  • 这是一个不同的问题:*.com/questions/41412398/…
  • 我错误地为我在本地创建的新分支 test_evals 执行此操作,我不想等同于 master。当有一堆合并冲突时,我意识到我的错误。对于与 master 分开的新本地分支,执行 git push --set-upstream origin test_evals 对我来说是诀窍。 (在执行git reset --hard HEAD~1 后,按照此处的建议撤消我从主人那里拉动:*.com/a/2389423/4383594)。
【解决方案2】:

git status 输出默认告诉你三件事:

  1. 你在哪个分支
  2. 本地分支相对于远程分支的状态是什么
  3. 如果您有任何未提交的文件

当您执行 git commit 时,它已提交到您的本地存储库,因此 #3 显示没有要提交的内容,但是,如果您设置了跟踪分支,#2 应该显示您需要推送或拉取。

如果您发现 git status 的输出冗长且难以理解,请尝试使用git status -sb,这会不那么冗长,并且会清楚地显示您是否需要推送或拉取。在您的情况下,输出将类似于:

master...origin/master [ahead 1]

git status 非常有用,在您描述的工作流程中执行git status -sb:在触摸文件后、添加文件后和提交文件后,查看输出中的差异,它会让您更清楚未跟踪、跟踪和提交的文件。

更新 #1
如果在阅读 git status 输出时存在误解,则此答案适用。但是,正如所指出的,在 OPs 案例中,上游设置不正确。对此,Chris Mae's answer 是正确的。

【讨论】:

  • OP 创建了一个新存储库,向该新存储库添加了一个新远程,然后从命名远程获取一个分支并将其设为本地master。由于这个有点特殊的序列(如果只在上游设置git clone 会更正常),他没有上游设置,所以git status 不能说他现在领先于上游。 (Chris Maes' answer 是正确的。)
【解决方案3】:

我遇到了同样的问题,因为我在工作目录中有 2 个 .git 文件夹。

您的问题可能是由同一件事引起的,因此我建议您检查一下您是否有多个.git 文件夹,如果有,请删除其中一个。

这让我可以成功上传项目。

【讨论】:

    【解决方案4】:

    问题是您没有指定遥控器的名称: 而不是

    git remote add https://github.com/username/project.git
    

    你应该使用:

    git remote add origin https://github.com/username/project.git
    

    【讨论】:

      【解决方案5】:

      其他人没有谈论的小提示:如果您在项目文件夹中添加空文件夹,git 不会记录更改。就是这样,我正在添加具有随机名称的空文件夹以检查它是否正在记录更改,但事实并非如此。 但是,当我开始在其中添加文件时,它就开始这样做了。 干杯。

      【讨论】:

        【解决方案6】:

        只需执行以下步骤

        1. 删除 .git 文件夹

        2. 添加 git 仓库

          $ git init

          $ git add origin master repo.git

        3. 然后拉取或推送文件

        完成!!!

        【讨论】:

          【解决方案7】:

          此解决方案可能不适合大多数情况,但在以下情况下它是救命稻草;您正在进行重大更改,然后 git commit 正在工作,但是当您在一个文件中进行轻微更改(比如说在 CSS 文件中)时,git commit 将不起作用。

          我遇到了这个问题,我通过在 GitHub 上进行更改并在那里提交然后在我的本地存储库上运行 git pull 来解决这种情况。

          【讨论】:

            【解决方案8】:

            按照这些步骤进行提交

            1.创建新分支以保护您的文件

            git checkout --orphan latest_branch
            

            2.将其添加到新分支中

            git add -A
            

            3.提交

            git commit -am "commit message"
            

            4.检查 git 状态

            git status
            

            5.files或正确尝试在这一步推送

            git push -f origin main
            

            现在您的文件是安全的

            如果您不想要特定的分支,请清除您的分支并创建您想要的分支

            例如:master 或 main

            6.删除分支

            git branch -D main
            

            7.将当前分支重命名为main

            git branch -m main
            

            8.最后,强制更新你的仓库

            git push -f origin main
            

            【讨论】:

              【解决方案9】:

              对我来说 $ git fetch 有效。它有助于将数据加载到 master

              【讨论】:

                【解决方案10】:

                删除您的 .git 文件夹,并使用 git init 重新初始化 git,在我的情况下这是可行的,因为 git add 命令暂存文件夹和文件在 .git 文件夹中,如果在提交后关闭 CLI,暂存区会出现双文件夹,导致 git 系统抛出此问题。

                【讨论】:

                • 删除 .git 文件夹将删除整个源代码管理。与实际问题相反。
                • 我的意思是删除 git 并重新初始化 .git 源代码控制,它会解决这个问题,不仅仅是删除它,还初始化它
                • 虽然您的解决方案通常没有错,但在给定的上下文中它可能会造成破坏,因为它可以删除任何未推送或未暂存的更改。您需要了解上下文并提出适当的解决方案,而不仅仅是通用的解决方案。
                最近更新 更多