我已经阅读了关于这个主题的类似帖子,并且不能为我的生活弄清楚如何正确地做到这一点.
我检查了大约1000个我不想要的文件,我宁愿不必通过1by1并将它们全部从回购中删除.
master分支.master分公司.他们都在同一修订版.
我想通过1次提交回滚我的遥控器.
说我的历史master就是A--B--C--D--E.
我想回滚我的本地D.
然后将其推送到远程,这样我的当前哈希将是D远程和本地.
我这样做有问题.
我正在使用Git Tower,但我对命令行很满意.有帮助吗?
更新: 下面的好评.似乎部分不鼓励使用重置,特别是如果存储库与其他用户共享. 在不使用硬重置的情况下,撤消先前提交更改的最佳方法是什么?有办法吗?
Von*_*onC 279
如果还没有人拉动您的远程仓库,您可以更改您的分支HEAD并强行将其推送到所述远程仓库:
git reset --hard HEAD^
git push -f
Run Code Online (Sandbox Code Playgroud)
(或者,如果您可以直接访问远程仓库,则可以更改其HEAD引用,即使它是一个裸仓库)
请注意,正如评论外星技术在下面的评论,在Windows(CMD会话),你将需要^^:
git reset --hard HEAD^^
git push -f
Run Code Online (Sandbox Code Playgroud)
如果有人已经撤回回购怎么办?那我该怎么办?
然后我会建议不重写历史的东西:
git revert 本地最后一次提交(创建一个新的提交,以反转先前的提交所做的)git revert.eck*_*kes 54
将本地分支设置为一个版本(HEAD^表示一个版本返回):
git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)
将更改推送到原点:
git push --force
Run Code Online (Sandbox Code Playgroud)
你将不得不强制推动,否则git会认识到你落后origin于一次提交而没有任何改变.
这样做--force告诉git HEAD在远程仓库中覆盖,而不考虑那里的任何进展.
Kan*_*n S 18
如果你想恢复最后一次提交监听:
步骤1:
使用消息检查您的本地提交
$ git log
Run Code Online (Sandbox Code Playgroud)
第2步:
删除上次提交而不重置本地分支(或主)的更改
$ git reset HEAD^
Run Code Online (Sandbox Code Playgroud)
或者,如果您不希望上次提交文件和更新侦听
$ git reset HEAD^ --hard
Run Code Online (Sandbox Code Playgroud)
第3步:
我们可以更新文件和代码,并再次需要强制推送它将删除以前的提交.它将保持新的提交.
$ git push origin branch -f
Run Code Online (Sandbox Code Playgroud)
而已!
这是程序的更新版本,它更安全。
git reset --hard HEAD^
git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)
git push -f将不加选择地用您自己的更改替换远程存储库。如果其他人推送了更改,他们将丢失。git push --force-with-lease如果存储库符合您的预期,则只会推送您的变基。如果其他人已经推送了您的推送将失败。
见——被认为有害的力;理解 git 的 –force-with-lease。
我建议将其别名为repush = push --force-with-lease.
如果有人已经提取了回购怎么办?那我该怎么办?
告诉他们git pull --rebase=merges。而不是 a git fetch originandgit merge origin/master它将git fetch originand git rebase -r origin/master。这会将他们的任何本地更改重写到master新的 rebased 之上origin/master。-r将保留他们可能进行的任何合并。
我建议将此作为拉动的默认行为。它是安全的,将处理其他人的变基,并减少不必要的合并。
[pull]
rebase = merges
Run Code Online (Sandbox Code Playgroud)
通过输入bellow命令,您可以看到您的git提交历史记录 -
$ git log
假设您在该特定分支上的历史记录如 - commit_A,commit_B,commit_C,commit_D.其中,commit_D是最后一次提交,这是HEAD保留的位置.现在,要从本地和远程删除最后一次提交,您需要执行以下操作:
第1步:在本地删除最后一次提交 -
$ git reset --hard HEAD~
这会将您的提交HEAD更改为commit_C
第2步:将您的更改推送到远程新HEAD提交
$ git push origin + HEAD
此命令将从远程删除最后一次提交.
PS此命令在Mac OSX上进行测试,并且也可以在其他操作系统上运行(不过声称其他操作系统)
**很快回答有关恢复和重置的问题**
有很多方法可以做到这一点。根据您的要求从下面选择任何内容。
1. 通过恢复提交:
如果您想恢复上次提交后的所有更改,这意味着如果您在文件中添加某些内容,则在恢复完成后这些内容将被删除。如果您删除文件中的某些内容,恢复过程将添加这些文件。
您可以恢复最后一次提交。喜欢:
1.git revert HEAD^
2.git push origin <Branch-Name>
Run Code Online (Sandbox Code Playgroud)
或者您可以使用该提交的哈希值恢复到任何先前的提交。例如:
1. git revert <HASH>
2.git push origin <Branch-Name>
Run Code Online (Sandbox Code Playgroud)
或者,如果提交是合并提交,您可以尝试以下操作:
1.git revert -m 1 <HASH> (-m 1 refers to the first parent of two merged branches)
2.git push origin <Branch-Name>
Run Code Online (Sandbox Code Playgroud)
2.通过重置前一个头
如果您只想指向任何先前的提交,请使用重置;它将您的本地环境指向之前的提交。您可以将头重置为之前的提交或将头重置为之前的任何提交。
重置为最后一次提交。
1.git reset HEAD^
2.git push -f origin <Branch-name>
Run Code Online (Sandbox Code Playgroud)
重置为任何先前的提交:
1.git reset <HASH>
2.git push -f origin <Branch-name>
Run Code Online (Sandbox Code Playgroud)
REVERT 和 RESET 之间的交易:
为什么选择执行恢复而不是重置操作?如果您已经将提交链推送到远程存储库(其他人可能已经拉取您的代码并开始使用它),则恢复是取消对他们的更改的更好方法。这是因为 Git 工作流程可以很好地在分支末尾获取额外的提交,但如果有人将分支指针重置回来时,如果链中不再看到一组提交,则可能会很困难。
重置分支可能会破坏你迄今为止所做的工作。因为当你重置一次提交时,GIT 将删除此提交之后所做的所有提交。一个愚蠢的错误可能会毁掉你所有的辛勤工作,并且不会保留任何内容。您正在重置的历史记录。另一方面,在这种情况下恢复提交是更好的选择。当您恢复提交时,GIT 会创建一个新的提交,其中的更改与您愿意恢复的提交完全相反。并且它指向该分支的末尾。所以它不会因为我们愚蠢的错误而搞砸任何事情。
| 归档时间: |
|
| 查看次数: |
98459 次 |
| 最近记录: |