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

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


当前回答

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

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

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

2.4 Git Basics - 撤销事情

其他回答

git 重置 -- 混集、 -- soft 和 -- hard 的区别

先决条件:当修改您存储库中的现有文件时,该修改最初被视为未阶段。为了实施修改,需要分阶段进行,这意味着使用索引git add。在一次任务操作中,被筛选的文件会被添加到索引中。

让我们举一个例子:

- A - B - C (master)

HEAD点点到C与索引匹配C.

-- 软

  • 当我们执行时git reset --soft B有意并打算删除承诺 C将主控/ HEAD 指向 B.
  • 主人/总部现在将指向B,但指向B指数与C指数仍有变化.
  • 执行时执行时git status您可以看到索引中的文件承诺 C计为阶段d.
  • 执行git commit到此点将创建新承诺与C相同的变化

-- 混合混合

  • 执行执行git reset --mixed B.
  • 执行时,主/主/总部领导将指B和B也修改索引以匹配 B原因是使用了混合国旗。
  • 如果我们在这一点上运行git承诺, 没有什么会发生,因为与 HEAD 的索引匹配.
  • 工作目录里还有变化 但是既然不在索引里git 状态显示为未阶段状态.
  • 承诺他们,你会git add然后如往常地实践。

--- 硬

  • 执行执行git reset --hard B
  • 执行时,主/总部主/总部将指B修改工作目录
  • 缩略C 中添加的更改全部未承诺的更改已删除.
  • 工作副本中的文件将与承诺 B 匹配, 这将导致永久删除在承诺 C 和 未承诺的更改中所做的所有更改

希望这种对可供使用的旗帜的比较git reset命令会帮助某人明智地使用它们。请参考这些以获取更多细节链接1 & 链接2

撤消上次承诺 :

git reset --soft HEAD^git reset --soft HEAD~

这将撤销最后一项承诺 。

--soft意思是重置为中位 。

HEAD~HEAD^意思是移动以在 HEAD 之前承诺 。


替换上次承诺的新承诺 :

git commit --amend -m "message"

它将以新承诺取代最后一项承诺 。

通过下列方式查看日志来查找上次承诺的散列代码 :

git log

然后

git reset <the previous co>

如果你有Git 外加已安装, 您可以运行git undo撤消最近的承诺。git undo 3将撤销最后三项承诺。

日期 于源树树( GitHub 的 GUI) , 您可以右键单击承诺并做一个“ 反向提交 ” 。 这将取消您的更改 。

在终点站上:

可选择使用:

git revert

或者:

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 your changes.