手机版

Linux系统下使用Git进行撤销操作教程

时间:2021-11-23 来源:互联网 编辑:宝哥软件园 浏览:

如果你在使用电脑的时候没有传播私人信息的意图,怎么能撤回呢?很多人都会有这种困扰,因为自己的疏忽可能会造成不必要的影响。现在Linux系统中有一个git撤销设置,可以在Git中撤销一些错误的操作,因为每次操作电脑的时候,Git都会保存之前的快照,如果想要撤销之前的步骤,只需要删除即可。下面和大家分享一下这个操作方法,以及Linux系统如何在Git中取消操作。当您提交一个新的提交时,Git将在那个特定的时间点保存您的代码库的快照。之后,您可以使用Git返回到项目的早期版本。在这篇博客文章中,我将解释一些常见的场景,在这些场景中,您需要“撤销”您所做的更改,以及使用Git进行这些操作的最佳方式。Linux系统下使用Git撤销操作的方法教程

撤销一个“已公开”的改变:您已经执行了git推送,并将您的更改发送到GitHub。现在你意识到其中一个承诺是有问题的。您需要取消哪个提交。场景: git revert 《SHA》方法: git revert将生成一个新的提交,该提交与指定SHA对应的提交相反(或相反)。如果原始提交是“物质的”,新提交是“反物质的”——从原始提交中删除的任何内容都将被重新添加到新提交中,而在原始提交中添加的任何内容都将在新提交中被删除。这是Git最安全也是最基本的撤销场景,因为它不会改变历史记录——所以你现在可以使用Git来推送一个新的“反向”提交,以抵消你错误提交的提交。原理,你在最后一条提交消息中犯了笔误,你执行了git commit-m“fxis bug # 42”,但是在git推送之前,你意识到消息应该是“Fixes bug # 42Prime。修正最后一个 commit 消息git commit-modify或git commit-modify-m“修复bug #42 42”原则:git commit-modify将更新最新的commit,并用新的commit替换最新的commit,新的commit将把任何修改与之前commit的内容结合起来。如果目前没有提出任何更改,此操作将只重写最后一条提交消息。场景::一只猫走过键盘,不小心保存了修改,然后破坏了编辑器。但是,您还没有提交这些更改。您希望恢复修改后的文件中的所有内容,就像上次提交时一样。方法:: Git签出-《bad filename》撤销“本地的”修改: Git签出会将工作目录中的文件修改到Git之前记录的某个状态。您可以提供您想要返回的分支名称或特定SHA,或者默认情况下,Git会认为您想要签出的是HEAD,即当前签出分支的最后一次提交。记住:你用这种方式“撤销”的任何改变都将彻底消失。由于它们从未被提交,Git无法在以后帮助我们恢复它们。确保你知道你在这次行动中扔掉了什么!(也许你可以先用git diff确认一下)场景方法:你在本地提交了一些东西(还没有推送),但是这些东西都很可怕。你想取消前三次提交,就像它们从未发生过一样。原理: git reset 《last good SHA》或git reset-hard 《last good SHA》  重置“本地的”修改: git reset会将您的代码库历史返回到指定的SHA状态。就像这些提交从未发生过。默认情况下,git reset保留工作目录。这样,提交就没有了,但是修改仍然在磁盘上。这是一个安全的选择,但通常我们希望“撤销”提交,并在一个步骤中修改内容,也就是硬选项的功能。场景:你提交了几个承诺,然后用git重置-很难撤销这些变化(见上一段)。然后你意识到你想恢复这些变化!方法: git reflog和git reset或git check原理: git reflog是恢复项目历史的一个很好的资源。你几乎可以恢复任何东西——任何你承诺过的东西——只需要通过reflog。您可能已经熟悉git log命令,它显示了提交列表。Git reflog与此类似,但它显示了HEAD更改的时间列表。  在撤销“本地修改”之后再恢复只关心海德的变化。切换分支时HEAD会发生变化,用git commit提交,用git reset取消提交,但用git checkout - 《bad filename》取消时HEAD不会发生变化(正如我们前面提到的)——前面提到,这些变化从未提交过,所以reflog无法帮助我们恢复它们。

Git reflog不会永远存在。Git定期清理“未使用”的对象。不要指望几个月前的投稿会一直躺在那里。你的日志是你的,只是你的。您不能使用git reflog来恢复另一个开发人员尚未推送的承诺。Linux系统下使用Git撤销操作的方法教程

那么……如何使用reflog来“恢复”之前“撤消”的提交呢?这取决于你想做什么:如果你想准确地将项目的历史还原到某个时间点,使用git reset-hard《SHA》。如果您想在工作目录中重建一个或多个文件并将它们还原到某个时间点,请使用git签出《SHA》 - 《filename》。如果你想重新提交这些承诺到你的代码库,使用git cherry-pick 《SHA》。场景,方法:你提交了一些文件,然后意识到你开始在主分支机构结账。您希望这些提交进入另一个功能分支。原理:git分支功能,git重置-硬原点/主,以及git签出功能 一些注意事项::你可能已经习惯了用git签出创建新分支-b 《name》-这是创建新分支并立即签出的流行快捷方式-但你不想立即切换分支。在这里,git分支功能创建了一个名为feature的新分支,并指向您最近的提交,但仍然允许您签出主分支。接下来,在提交任何新的提交之前,使用git reset - hard将主分支倒回原点/主分支。但是不要担心,那些提交仍然在特性分支中。最后,使用git checkout切换到新的特性分支,并保持您最近的所有工作完好无损。  利用分支的另一种做法:优基于主分支创建了特征分支,但主分支远远落后于原点/主分支。现在主分支已经和origin/master同步了,你希望功能上的提交从现在开始,而不是从一个落后很多的地方开始。场景: Git签出功能和Git Rebase Master方法:为了达到这个效果,您本可以通过git reset(不带- hard,这样您就可以将更改保留在磁盘上)和git checkout -b 《new branch name》再次提交更改,但是如果这样做,您将丢失提交历史记录。我们有更好的办法。Git rebase master将执行以下操作:首先,它将找到您当前检出分支和主分支的共同祖先。然后,它将当前签出的分支重置为该公共祖先,并将所有以前的提交存储在临时存储区域中。然后,它将当前检出分支引用到主分支的最后一部分,并在主分支的最后一次提交之后,从临时存储区域重新提交存储的提交。原理:你开始在某个方向上实现一个功能,但是进行到一半时,你意识到另一个方案更好。你已经提交了十多次了,但是现在你只需要其中的一些。你希望所有其他不必要的提交消失。  及时分支,省去繁琐: git rebase-I 《earlier SHA》场景:-I参数将rebase置于“交互模式”。它最初类似于前面讨论的rebase,但是它将暂停,并允许您在重新提交之前详细修改每个提交。我将打开你的默认文本编辑器,它列出了候选提交。如下所示:Linux系统下使用Git撤销操作的方法教程

前两列是键:第一列是选定的命令,对应于第二列中SHA确定的提交。默认情况下,rebase -i假设每个提交都将通过pick命令使用。要放弃提交,只需在编辑器中删除该行。如果您不再需要项目中那些错误的提交,您可以删除上面示例中的第1、3和4行。如果需要保留提交的内容并编辑提交消息,可以使用return命令。将第一列中的pick替换为reword(或简单地使用r)。有些人认为直接在这里重写commit消息是可以的,但是它不起作用-rebase-我将忽略SHA列之前的任何内容。后面的文字只是用来帮助我们记住0835fe2是做什么的。当您完成rebase -i操作时,将提示您输入任何需要写入的提交消息。如果需要合并两个提交,可以使用挤压或修复命令,如下所示:Linux系统下使用Git撤销操作的方法教程

挤压和修复将合并“向上”——带有这两个命令的提交将合并到它的前一个提交中。在本例中,0835fe2和6943e85将合并到一个提交中,38f5e4e和af67f82将合并到另一个提交中。如果您选择挤压,Git将提示我们给新合并的提交一个新的提交消息。修复会将合并列表中的第一个提交消息直接发送到新合并的提交。在这里,你知道af67f82是一个“完成了……”。提交,所以您将保留38f5e4e的提交消息,但是您将为0835fe2和6943e85的新提交编写一个新消息。当您保存并退出编辑器时,Git将从上到下应用您的提交。您可以通过在保存之前修改提交顺序来更改应用程序的顺序。如果你愿意,也可以通过以下安排将af67f82和0835fe2合并在一起:Linux系统下使用Git撤销操作的方法教程

方法原理:你忘了在之前的提交中添加文件。如果早期提交能够包含这个被遗忘的文件,那就太好了。您还没有推送,但这不是最新的提交。所以你不能使用提交-修改。大量的撤销/恢复: git commit-squish 《SHA of the earlier commit》和git rebase-auto squish-I 《even earlier SHA》场景: git commit-squish将创建一个带有提交消息的新提交,类似于squish!较早提交.(您也可以手动创建一个提交,并显示类似于提交的消息,但是提交挤压可以节省您的输入时间。如果您不想被提示为新合并的提交输入新的提交消息,您也可以使用git commit - fixup。在这种情况下,您可能会使用commit - fixup,因为您只想在重定基准时使用早期提交的提交消息。我将激活一个交互式的Rebase编辑器,但是当编辑器打开时,提交列表中的任何挤压!还有修理!的提交已与目标提交配对,如下所示:Linux系统下使用Git撤销操作的方法教程

当使用-挤压和-修复时,您可能不记得您想要纠正的提交的SHA只需记住它是之前的第一个或第五个提交。你会发现Git的and ~运算符特别有用。head是HEAD的前一次提交。HEAD~4是从HEAD向前的第四次,或者一起,第五次最后一次提交。方法:您不小心将application.log添加到了代码库中。现在,每次运行应用程序时,Git都会在应用程序日志中报告未提交的更改。登录。Gitignore文件,但是文件还在代码库中——怎么告诉git“撤销”对这个文件的跟踪?原理: gistrm-cachedaapplication . log修复更早期的 commit:虽然。gitignore会阻止git跟踪文件修改,甚至不注意文件的存在,它只针对以前从未被跟踪过的文件。一旦文件被添加和提交,Git将关注文件的变化。同样,如果您使用Git add -f来强制或覆盖。gitignore,git将跟踪这些变化。那么您不必使用-f来添加这个文件。如果您想从Git的跟踪对象中删除应该被忽略的文件,git rm - cached会将其从跟踪对象中删除,但将文件原封不动地保留在磁盘上。现在它已经被忽略了,您将不会在git状态下再次看到这个文件,也不会意外地再次提交这个文件的修改。GIT操作中有很多说法,不是简单的撤销就能完成的。以上教程可以让你对Git函数有一个大概的了解,但具体操作要根据操作说明。希望你能送去使用!

版权声明:Linux系统下使用Git进行撤销操作教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。