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

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


当前回答

$ git commit -m 'Initial commit'
$ git add forgotten_file
$ git commit --amend

重要的是要明白,当你正在修正你的最后一项承诺时,你并没有完全用新的、更好的承诺来取代它,新的承诺将旧承诺推开,而将新承诺置于其位置。 事实上,这好像前一项承诺从未发生,也不会出现在你的存储库历史中。

修改承诺的明显价值是略微改进你的最后一项承诺,而不会用表格“Oops,忘记添加文件”或“Darn,在最后一项承诺中确定打字符”等字词来模糊你的存储库历史。

2.4 Git Basics - 撤销事情

其他回答

撤销一系列本地承诺

OP: 我如何撤销当地最近在Git的最新承诺? 我无意中犯下了错误的案卷[作为几项承诺的一部分]。

开始案例

依你追求的结果而定,有几种方式可以“不做”作为承诺系列。考虑到下面的起始案例,reset, rebasefilter-branch全部可以用于重写您的历史 。

Star-case

如何可以C1 C1C2 C2 级将取消以删除tmp.log是否从每个文件中做出 ?

在下文的例子中,使用了绝对承诺参考,但如果更多地使用相对参考(即:HEAD~2HEAD@{n}).

备选案文1:reset

$ git reset --soft t56pi

using-reset

reset,一个分支可以重置到先前的状态,而任何复合变化都返回到等待区,从中可以放弃任何不必要的变化。

注:原为:reset将所有先前的修改分组到等待区,个人承诺元数据将丢失。如果这与您有问题,你也许更有机会与rebasefilter-branch取而代之。

备选案文2:rebase

$ git rebase --interactive t56pi

using-rebase

使用交互式rebase可以在分支中修改和丢弃不想要的更改。在以上信息图中,右侧的源树可以显示状态位置。rebase.

逐步执行

  1. 选择从哪处进行重置基底(例如 :t56pi)
  2. 选择您要通过替换更改pickedit保存和关闭。
  3. Git 现在将停止对每个选中承诺的每次执行, 允许您重置HEAD,删除不需要的文件,创建全新的承诺。

注:rebase大部分承诺元数据的保存与承诺元数据的保存形成对比。reset上方的替代选项。 如果您想要保留大部分历史, 但只删除不需要的文件, 这很可能是一个首选选项 。

备选案文3:filter-branch

$ git filter-branch --tree-filter 'rm -r ./tmp.log' t56pi..HEAD

上上命令会过滤文件./tmp.log所有承诺在理想范围内的t56pi..HEAD(假设我们最初的起步案例来自以上)请见下文说明清楚。

using-filter-branch

类似rebase, filter-branch可用于从分支的一个小节中清除不想要的文件。 而不是通过重设程序手动编辑每项承诺,filter-branch能够自动预设对每项承诺的预期行动。

注:就像rebase, filter-branch仅丢弃所需文件, 将保存承诺元数据的其余部分 。C1 C1C2 C2 级已经改写了, 日志文件被丢弃了, 从每个任务中 。

结论 结论 结论 结论 结论

就像任何与软件开发有关的事情一样,对于一个特定的问题,有多种方法可以实现相同(或类似)的结果。你只需要选择最适合你特定案例的方法。

最后 -- -- 友好建议

请注意上面所有三种选择都完全重写历史。 除非您确切知道自己在做什么, 并在团队中保持良好的沟通 — — 只有重写承诺还没有远程发布 !

资料来源:以上所有例子都是从中借用的博客博客.

取决于您是否已经公开了您的前一次承诺( 插入到您的远程仓库 ) :

如何撤销本地任务

比方说我承诺了当地, 但现在我想取消那个承诺。

git log
    commit 101: bad commit    # Latest commit. This would be called 'HEAD'.
    commit 100: good commit   # Second to last commit. This is the one we want.

要让一切恢复到上次承诺之前的状态 我们需要reset之前的承诺HEAD:

git reset --soft HEAD^     # Use --soft if you want to keep your changes
git reset --hard HEAD^     # Use --hard if you don't care about keeping the changes you made

现在git log将显示我们最后的承诺已被删除 。

如何撤销公开承诺

如果您已经公开了承诺, 您将会想要创建一个新的承诺, 它将“ 撤销” 您对上一个承诺( 当前 HEAD) 所做的更改 。

git revert HEAD

你们的更改将恢复,并准备好你们承诺:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

更多信息,请查看Git Basics - 撤销事情.

这将添加一个新的承诺, 删除所添加的文件 。

git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"

或者您可以重写历史来撤销最后一项承诺 。

警告警告警告警告:此命令将永久删除对《京都议定书》的修改.java您承诺的文件( 和任何其他文件) -- 从工作目录中删除全部修改 :

git reset --hard HEAD~1

缩略hard resetHEAD-1您的工作副本将在您错误犯罪之前设定为犯罪状态 。

使用此命令

git checkout -b old-state 0d1d7fc32

使用使用源树树(Git 的图形工具) 查看您的承诺和树。 您可以单击右键手动重置它 。