git - 你的分支比'origin/master'领先1次提交

162

我是git的新手,正在学习和使用它。

我在git中添加了一些文件:

git add <file1>
git add <file2>

然后我想将其推送进行审核,但错误地执行了此操作。

git commit

所以我更改过的文件不会进行审核。
现在,如果我输入以下命令:

git status
它说:
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

我想撤销那次提交,并且我希望将这些文件推送进行查阅,而不是提交。
有人可以告诉我如何做吗?


如果你想撤销你的提交 - 参考类似的问题 - ДМИТРИЙ МАЛИКОВ
2
我不知道你用什么进行代码审查。如何取消提交的简单问题的简单答案是 git reset HEAD^ - Anonymoose
我已经重置了HEAD。但是当我尝试推送时,它告诉我: D file1.py当我再次尝试推送时,它告诉我你的分支比origin/master多一个提交。 - sam
这是令人困惑的术语:在推送代码之前,您必须“提交”您的代码。你说什么,它会在审核后被提交?可能是其他人将其合并到官方存储库中? - Shep
(我相信有许多有效的工作流程,所以我接下来要说的可能与你的团队操作方式无关...)我熟悉的工作流程是在“特性”或“开发”分支中提交更改并将其推送到中央存储库。在代码审查后,“特性”分支可以合并到主分支中。 - antinome
显示剩余2条评论
7个回答

165

如果还没有提交内容,就不能进行push操作。操作顺序如下:

  1. 进行修改。
  2. git add - 将修改暂存到本地仓库中以备提交。
  3. git commit - 保存你的修改并生成提交记录。
  4. git push - 推送你的提交记录到远程仓库。

如果在没有进行commit的情况下进行push,则不会有任何东西被推送。如果在没有进行add的情况下进行commit,也不会有任何东西被提交。如果在没有进行commit的情况下进行add,那么Git只会记住你添加的修改,并在下一次commit时将其一并提交。

当看到提示信息("your branch is ahead by 1 commit")时,意味着本地仓库中存在一个未推送的提交记录。

换言之:addcommit是本地操作,pushpullfetch是与远程交互的操作。

如果你所在的工作场所已经有了官方源代码控制工作流程,请内部咨询如何处理此问题。


6
好的,这意味着在提交(commit)之后,我需要将它推送(push)。 - sam
5
好的解释——问题的提问者可能不想真正地撤销提交,而是希望在将其推送到“origin”仓库之前让人们查看该提交。我还建议阅读一些Git教程/入门介绍,可以在http://git-scm.com/documentation上找到。 - dbr
2
当我的git状态显示“您的分支领先于'origin/develop' 1个提交。”时,我该如何查看哪些文件已更改? git diff似乎没有任何作用。 - Tom
有时候会有其他人在那里工作。在推送之前先进行拉取。 - Adrian P.

141

git reset HEAD^ --soft(保存你的修改,回退到上一个提交)

git reset HEAD^ --hard(放弃修改,回退到上一个提交)


8
脑袋上带着胡萝卜符号'^'有什么意义?我也见过没有胡萝卜符号的写法。 - Mugen
1
我认为胡萝卜会回滚一个提交(所以如果您需要备份3个提交,则可以运行命令3次)。同样,您可以运行 git reset HEAD~ --hard 将所有提交还原到HEAD。 - Kevin K
9
应该写成caret而不是carrot。 - Eskay Amadeus
请参见以下链接中的详细讨论:https://dev59.com/UnE95IYBdhLWcg3wn_j2 - Yellowjacket

46

如果您只想放弃更改并恢复到最后一次提交(您想共享的提交):

git reset --hard HEAD~

你可能需要仔细检查一下是否真的需要这样做 (git log),因为它会使你失去所有更改。

一个更安全的选择是运行

git reset --soft HEAD~ # reset to the last commit
git stash              # stash all the changes in the working tree 
git push               # push changes 
git stash pop          # get your changes back 

25

我解决了这个问题,只需运行一个简单的命令:

git pull

没有更多了。 现在显示:

# On branch master
nothing to commit, working directory clean

如果创建了不必要的多个分支,这可能会导致问题。 - Anil Arya
4
你回到了你的远程状态并且失去了你最后一次的工作 :D。 - Gucho Ca

19

git reset HEAD^

运行此命令后,修改的文件将会出现。

您可以将修改过的文件移动到新分支中

使用以下命令:

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

这时您应该在一个干净的分支上,并且您的更改应该存储在新分支中。稍后您可以将此更改合并到主分支中。


4
git reset HEAD <file1> <file2> ...

从下一次提交中删除指定的文件。


0

连接到

远程 origin/master

而不是

本地 master

并发起一个 pull request。

基于远程 master 创建一个新分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接