当用户在 "git add" 和 "git commit" 之前执行 "git push" 时会发生什么?

What happens when user does "git push" before "git add" and "git commit"?

我正在做一个项目,对我的代码进行了一些更改(在 Itellij IDE 中),我错误地在我的终端中执行了以下两个步骤,我看到一些更改进入了主存储库(不是我的更改或我以前工作过的任何东西)。 有谁知道它为什么这样做?

注意: 推送的更改不是我的代码。

  1. git 从我的终端拉取(我收到的所有最新信息)
  2. git 从我的终端推送(而不是 "git add" 和 "git commit")

    • 添加附加信息(已编辑) 是的,在执行 git 推送之前,我在本地存储库中进行了一些更改。但是当我犯了 "git push" none 的错误时,我本地提交的更改被推送了,而是推送了我拉取的其他代码。

我不明白为什么git会那样做,想在这里问一个问题来理解。

问这个问题是为了在不影响我对答案的看法的情况下了解可能的原因。

很难准确地说出发生了什么,因为您在执行意外 git pullgit push 时没有告诉我们您当地分支机构的状态。假设您开始时没有本地提交,而本地提交还没有出现在远程跟踪分支上,那么我预计 git push 会失败,因为远程已经是最新的。如果你在意外 git pull 和 Git 之前有 运行 git status 告诉你你的分支在远程之前有 0 个提交,那么这个标志就是。

对于第二步,您执行了 git push。假设这一切都通过了,那么我会将其解释为您实际上确实有一些尚未推送的本地提交。所以,所有发生的事情都是你以前的一些本地工作被推送到存储库,也许是过早的。假设这些承诺是出于善意,您可能没有什么可担心的。如果没有,那么您始终可以使用 git revert.

还原其中一个或多个提交

这是我尝试复制时发生的情况

user@machine MINGW64 /c (11.1.0)
$ git pull
Already up-to-date.

Git 拉取成功,我对我的文件进行了更改。

user@machine MINGW64 /c (11.1.0)
$ git push
Everything up-to-date

没有发现任何东西。

user@machine MINGW64 /c (11.1.0)
$ git status
On branch 11.1.0
Your branch is up-to-date with 'origin/11.1.0'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   ReleaseNotes/Release_Notes_11.1.0.docx

no changes added to commit (use "git add" and/or "git commit -a")

当我执行 git 状态时,它识别出一个变化

user@machine MINGW64 /c (11.1.0)
$ git add .

为提交添加了文件。

user@machine MINGW64 /c (11.1.0)
$ git push
Everything up-to-date

再次没有发现任何东西

user@machine MINGW64 /c (11.1.0)
$ git status
On branch 11.1.0
Your branch is up-to-date with 'origin/11.1.0'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   ReleaseNotes/Release_Notes_11.1.0.docx

状态已识别变化

user@machine MINGW64 /c (11.1.0)
$ git commit -m 'Release notes amended'
[11.1.0 28697fa] Release notes amended
 1 file changed, 0 insertions(+), 0 deletions(-)
 rewrite ReleaseNotes/Release_Notes_11.1.0.docx (62%)

本地承诺

user@machine MINGW64 /c (11.1.0)
$ git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 50.57 KiB | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: Create pull request for 11.1.0:
remote:   https://bitbucket.org/URL
remote:
To bitbucket.org:Project/repo.git
   7db5eb6..28697fa  11.1.0 -> 11.1.0

至此推送成功

在您的情况下,当您应用推送时,一定有一些本地提交的更改。