【问题标题】:What happens when user does "git push" before "git add" and "git commit"?当用户在“git add”和“git commit”之前执行“git push”时会发生什么?
【发布时间】:2018-02-14 09:01:11
【问题描述】:

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

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

  1. git pull(所有最新的,我收到了)从我的终端
  2. 来自我的终端的 git push(而不是“git add”和“git commit”)

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

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

在不影响我对答案的看法的情况下,要求该问题了解可能的原因。

【问题讨论】:

  • 您的问题充其量是模糊的。如果您没有进行本地提交,则 push 什么也不做。
  • @AbhijitSarkar 这也是我的总体感觉。我尝试了一个答案,试图解释如果推送实际通过可能会发生什么。
  • 也许您的 IDE 会自动提交您的代码。使用git loggit reflog 了解发生了什么。

标签: git git-commit git-push git-pull git-add


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    Git pull 成功,我对文件进行了更改。

    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 status 时,它发现了一个变化

    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
    

    现在推送成功了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2011-02-14
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多