我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。

我如何解除那些承诺?当地当地仓库?


当前回答

每次我需要撤销承诺/承诺时,我要做的是:

  1. git reset HEAD~<n>/ 上次承诺的数量, 我需要撤销

  2. git status/ 可选。 所有文件现在都红色( 未预设 ) 。

  3. 现在,我可以添加并只承诺我所需要的文件 :

  • git add <file names> & git commit -m "message" -m "details"
  1. 可以选择:我可以将其它文件的更改(如果需要的话) 推回到它们以前的状态, 并进行退票:
  • git checkout <filename>
  1. 如果我已经把它推向了遥远的起源, 之前:
  • git push origin <branch name> -f用 -f来强迫推

其他回答

使用 reflog 查找正确状态

git reflog

reflog before 安全前的路线

选择正确的 reflog( 以我为例, f3cb6e2) 和类型

git reset --hard f3cb6e2

在那之后,重置的总部将重新设置为重置的总部。reset effect 冲突后的讲解

最终, 折叠图看起来像下面的图片

reflog after 谈判最后定本

更改上次承诺

替换索引中的文件 :

git rm --cached *.class
git add *.java

那么,如果它是私人分支,修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正修正承诺:

git commit --amend

或者,如果它是共享分支, 做出新的承诺:

git commit -m 'Replace .class files with .java files'

(更改上一个承诺,使用真棒交互式重新基数.)


ProTipTM: 添加*.class至 a高光度( gitignore)阻止这种情况再次发生。


收回承诺

修改承诺是理想的解决办法,如果需要改变最后的承诺,但更普遍的解决办法是:reset.

您可以将 Git 重置为任何承诺 :

git reset @~N

何处处N之前承诺的数HEAD, 和@~重发到上一个任务 。

您不必修改承诺,而是可以使用:

git reset @~
git add *.java
git commit -m "Add .java files"

退 退 退git help reset,特别是:--soft --mixed--hard为了更好地了解它的作用

reflog 格式

如果你搞砸了,你总是可以使用折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式折叠式

$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started

如果您想要删除错误的文件, 您应该做

git reset --soft <your_last_good_commit_hash_here>来,如果你来git status中,您会看到中转区的文件。您可以选择错误的文件,然后从中转区取下来。

喜欢下面。

git reset wrongFile1 wrongFile2 wrongFile3

您现在可以添加您需要按键的文件,

git add goodFile1 goodFile2

提交提交它们

git commit -vgit commit -am "Message"

推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推,推

git push origin master

但是,如果您不关心已更改的文件, 您可以硬重置到先前的良好承诺, 并将所有文件都推到服务器 。

git reset --hard <your_last_good_commit_hash_here>

git push origin master

如果您已经向服务器发布错误的文件, 您可以使用--force挂号以向服务器推动并编辑历史。

git push --force origin master

当地承诺

git reset --soft HEAD~1

或者如果你们记不起来,那末,你们可以使用

git rm --cached <file>

用于被推动的 承诺

从存储库历史中移除文件的正确方式正在使用git filter-branch。也就是说,

git filter-branch --index-filter 'git rm --cached <file>' HEAD

但我建议您谨慎使用此命令。 更多信息git-过滤器-分栏(1) 手册.

类型类型类型git log并发现最后的散列代码,然后输入:

git reset <the previous co>