我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。
我如何解除那些承诺?当地当地仓库?
我无意间把错误的档案 写错给Git 基特,但还没有将承诺推进到服务器上。
我如何解除那些承诺?当地当地仓库?
当前回答
撤消上一个任务
在很多情况下,你真的想撤销你代码中的最后一项承诺。例如,因为你想对它进行广泛的重组,甚至完全抛弃它!
在这种情况下,"重置"命令就是你最好的朋友:
$ git reset --soft HEAD~1
以上命令( 重置) 将把您当前的 HEAD 分支倒回指定的修改 。 在以上的例子中, 我们想回到当前修改前的修改中, 有效地取消我们上次的修改 。
注注:--soft
旗帜 : 这样可以确保未撤销修改中的更改被保存。 在运行命令后, 您会发现这些更改是您工作副本中未承诺的本地修改 。
如果您不想保留这些修改,只需使用--hard
。确保只在确定不再需要这些更改时才这样做。
$ git reset --hard HEAD~1
其他回答
如果你有Git 外加已安装, 您可以运行git undo
撤消最近的承诺。git undo 3
将撤销最后三项承诺。
取决于您是否已经公开了您的前一次承诺( 插入到您的远程仓库 ) :
比方说我承诺了当地, 但现在我想取消那个承诺。
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 - 撤销事情.
撤销一项承诺是有点吓人,如果你不知道它是如何运作的。 但如果你理解的话,它其实很容易。我会告诉你4种不同的方式, 你可以解除一项承诺。
说你们有这个,C是你们的总部,(F)是你们档案的状态。
(F)
A-B-C
↑
master
git reset --hard
您想要销毁C国罪行,并抛弃任何未承诺的变更。你这样做:
git reset --hard HEAD~1
结果是:
(F)
A-B
↑
master
现在B是总部,因为你用了--hard
中,您的文件在承诺 B 时被重置为状态。
git reset
也许C不是灾难,只是有点不对劲取消承诺,但保留您的更改在您做更好的承诺之前需要编辑一点。 从这里重新开始, C 做为您的总部 :
(F)
A-B-C
↑
master
做这个,离开--hard
:
git reset HEAD~1
在这种情况下,结果是:
(F)
A-B-C
↑
master
在这两种情况下,HEAD都只是最新承诺的指针。git reset HEAD~1
,您告诉 Git 将 HEAD 指针移回一个承诺。但(除非您使用)--hard
你把你的档案和以前一样留在原样,所以现在git status
显示您在 C 中检查过的更改。 您没有丢失任何东西 !
git reset --soft
最轻轻的触碰,你甚至可以取消您的承诺, 但要离开您的文件和文件指数指数指数指数:
git reset --soft HEAD~1
这不仅留下你的档案, 甚至离开你的指数指数指数指数当你独自一个人去的时候,git status
,你会看到相同的文件在索引中和以前一样。事实上,在这个命令之后,你可以做git commit
你会重蹈覆辙 做你刚做过的同样的事
git reset --hard
需要把密码拿回来还有一件事: 假设你销毁如在第一个示例中,但后来发现你需要它运气不好,对不对?
不,有仍为键入此
git reflog
你将看到一份(部分)承诺的清单,沙沙即你们所迁居的地方。你们要找出你们所摧毁的罪状,然后你们要这样做:
git checkout -b someNewBranchName shaYouDestroyed
承诺在Git不会在90天内被摧毁 所以你通常可以回去 拯救一个你本不想除掉的人
$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~ # (1)
[ edit files as necessary ] # (2)
$ git add . # (3)
$ git commit -c ORIG_HEAD # (4)
git reset
是负责取消对。它会解除您最后的承诺,而您的工作树( 您在磁盘上的文件状态) 尚未被移动 。在你再次犯下罪行之前,你需要再加一次)。git add
任何您想要包含在您新承诺中的内容 。reset
复制旧头头到.git/ORIG_HEAD
; commit
与-c ORIG_HEAD
将打开编辑器,该编辑器最初包含旧承诺的日志消息,并允许您编辑它。如果不需要编辑该消息,您可以使用该-C
选项。或者编辑上一个承诺( 或仅其承诺信件), commit --amend
将在当前索引内对上一个承诺添加变化。
要删除( 不再返回) 被推到服务器的承付重写历史git push origin main --force[-with-lease]
这是必要的。这是几乎几乎总是使用一个坏主意--force
; 偏; 更优--force-with-lease
改为,如以下所示:Git 手册:
如果你[重写历史]已经发表,你应该了解重写历史的意义。
您可以使用git reflog
确定 SHA-1用于您想要返回的承诺。 一旦您拥有此值, 请使用上文解释的顺序命令 。
HEAD~
与HEAD~1
该条什么是头在Git?如果您想要解开多项承诺, 将会很有帮助 。
删除已被推到 Github 的错误行为
git push origin +(previous good commit id):(branch name)
请指定您想要在 Github 重置的最后一个好承诺代号 。
例如,如果最近的承诺 ID 错误, 请用分支名称在 Git 命令上方指定前一个承诺 ID 。
您可以使用git log