我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
当前回答
典型基周期
在前几次答复中谈到与Git相关的命令时,我想向所有读者介绍我典型的Git周期,这可能是有益的。 这就是我如何与Git合作,
首次从远程服务器上克隆 $project pulling 从远程( 当我没有未完成的本地推动承诺) git 将新的本地文件 1 添加到 $to_be_compent_list_list (只是想象 $to_be_compent_list means staged 区域) git 添加 $file1 从 $to_be_compent_list_list_list 列表中删除错误添加的文件 2 (假设文件2 添加为步骤 3 ) git 重新设置 $file2 提交文件 1 , 该文件位于 $to_ be_compent_ list git 承诺 - m “ comm 信件描述” 与远程仓库同步本地文件 1 (在冲突发生时配置合并工具 Git 合并时重新解析 # re Solive 合并, 也可以手动合并 添加冲突解析文件, 让我们说: git 添加 $file1 继续我之前的重定义命令 gfile1 -- 继续推进和已经同步的上次本地承诺推进源头: rechangs/ for
其他回答
如果您想要还原最后一个任务, 但仍要保留在任务中本地作出的更改, 请使用此命令 :
git reset HEAD~1 --mixed
主要设想有两种情况:
你还没推动承诺呢
如果问题在于您所做的额外文件( 而您不希望存储库中的文件) , 您可以使用 git rm 来删除文件, 然后用 -- amend 进行 -- amend
git rm <pathToFile>
您也可以用 -r 来删除整个目录, 或甚至与其他 Bash 命令合并
git rm -r <pathToDirectory>
git rm $(find -name '*.class')
删除文件后, 您可以使用 -- amend 选项执行 -- amend 选项
git commit --amend -C HEAD # the -C option is to use the same commit message
这将重写您最近的本地承诺删除额外文件, 因此, 这些文件将不会被按键发送, 并且 GC 将会从您本地的. git 仓库中删除 。
您已经推进了任务
您可以对其它情景应用相同的解决方案, 然后用 -f 选项进行 Git 推, 但建议不推荐, 因为它以不同的变化覆盖了远程历史( 它会干扰您的仓库 ) 。
相反,您必须在不做 -- amend 的情况下做承诺(记住关于 -amend : 此选项重写上次承诺的历史 ) 。
第一运行 :
git reflog
这将显示您在存储库中实施的所有可能的动作, 例如, 承诺、 合并、 调用等 。
那么,请:
git reset --hard ActionIdFromRefLog
我很久以前也曾写过这些话,
如何删除/ 反转 Git 承诺
基本上,你只需要做:
git 日志, 获取 SHA hash 的前七个字符, 然后进行 git return < sha> , 然后再进行 git push -- force 。
您也可以使用 Git 返回命令, 恢复此命令如下: git 返回 < sha> - m - 1, 然后按 git 键 。
如果你犯下了破案 但没有被逼
git reset --soft HEAD~1
HEAD ~ 1 是头部前的承诺的速记。 或者, 如果您想要重置的话, 您可以引用散列的 SHA-1 。 -- 软选项会删除此项承诺, 但是它会留下您更改过的所有文件“ 更改要执行 ” , 正如 git status 所声明的那样 。 如果您想要删除工作树中跟踪文件的任何更改, 因为任务在头部使用“ 硬” 取代前, 您可以在工作树中取消此任务 。
或
如果你已经被推了 然后有人拉了过来 通常是我的案子 你不能用Git重置
git revert HEAD
这将产生新的承诺, 扭转意外行为带来的一切。