136

我是 git 的新手,我正在研究 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)

我想恢复该提交,并且我想推送这些文件以供审查而不是提交。谁能让我知道我该怎么做?

4

6 回答 6

151

您无法推送尚未提交的任何内容。操作顺序为:

  1. 做出改变。
  2. git add- 这会分阶段提交您的更改
  3. git commit- 这会在本地提交您的分阶段更改
  4. git push- 这会将您提交的更改推送到远程

如果您不提交就推送,则不会推送任何内容。如果您不添加就提交,则不会提交任何内容。如果你在没有提交的情况下添加,什么都不会发生,git 只会记住你添加的更改应该被考虑用于下一次提交。

您看到的消息(您的分支领先 1 个提交)意味着您的本地存储库有一个尚未推送的提交。

换句话说:addcommit是本地操作,pushpullfetch与远程交互的操作。

由于您工作的地方似乎有一个官方的源代码控制工作流程,您应该在内部询问应该如何处理它。

于 2012-04-16T06:06:24.647 回答
93

git reset HEAD^ --soft(保存您的更改,回到上次提交)

git reset HEAD^ --hard(放弃更改,返回上一次提交)

于 2012-04-16T06:06:44.657 回答
39

如果您只是想丢弃更改并恢复到最后一次提交(您想分享的那个):

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 
于 2012-04-16T06:04:23.433 回答
24

我通过运行一个简单的方法解决了这个问题:

git pull

而已。现在它显示:

# On branch master
nothing to commit, working directory clean
于 2013-07-31T21:44:35.080 回答
17

git重置头^

然后应该显示修改后的文件。

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

利用,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

那么你应该在一个干净的分支上,你的更改应该存储在 newbranch 中。您可以稍后将此更改合并到主分支

于 2016-01-19T09:28:32.563 回答
4
git reset HEAD <file1> <file2> ...

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

于 2012-04-16T06:03:57.067 回答