本地仓库(.git):在工作区中有个隐藏目录.git,这就是 Git 本地仓库的数据库。工作区中的项目文件实际上就是从这里签出(checkout)而得到的,修改后的内容最终提交后记录到本地仓库中。...^主要是控制merge之后回退的方向HEAD~才是回退的步数通过命令行删除远程和本地提交记录常见的代码回滚场景回滚场景:仅在工作区修改时当文件在工作区修改,还没有提交到暂存区和本地仓库时,可以用 git...执行以下命令回滚暂存区的修改:git reset HEAD build.sh回滚后工作区会保留该文件的改动,可重新编辑再提交,或者 git checkout -- 文件名 彻底丢弃修改。...回滚场景:已 commit,但还没有 push 时即已经提交到本地代码库了,不过还没有 push 到远端。....htmlgit中reset和revert的区别是什么 https://www.php.cn/tool/git/485052.htmlGit恢复之前版本的两种方法reset、revert(图文详解) https
第一章:利用 binlog 进行数据回滚 ① 查看 binlog 文件所在位置 首先通过下面的语句查看 binlog 文件所在位置。...② 查看主数据正在存储数据的 binlog 文件名 查看 show master status ? 可以定位到目前正在存储数据的是 binlog.000025 ?...⑥ 回滚方式二:通过位置点导出 sql 语句 首先看两个恢复点中间的位置信息。 上面是通过两个时间点截取,这个是通过两个位置点截取。 ? ? 通过指定位置导出数据库。...: 通过 source 方法恢复数据库 登录数据库、切换数据库、恢复数据库。...位置的直接 binlog 恢复库方法。
1.回滚到指定历史版本 先使用git log查看历史版本 git log 在使用git reset –hard命令回滚 git reset --hard 要回滚id 示列: 使用git log回滚 第一行的...查看单个文件可回滚版本:git log filename 当我们想回滚指定文件到指定版本时,需要查看该文件有多少个版本可以回滚时,可以使用git log filename命令 git log test.c...删除一个文件 git rm d.c 在使用git reset重置所有缓存区操作 git reset 重置完成之后在使用git checkout命令将文件取消操作 git checkout d.c 可以看到文件又恢复了...-v 显示有关遥控器的信息 $ git remote show 添加名为的新远程存储库 $ git remote add 从下载所有更改,但不要集成到HEAD中 $ git fetch...这并不意味着您在提交之前必须先完成一个完整的大型功能。 恰恰相反:将功能的实现分成逻辑块,并记住提早并经常提交。 但是,不要承诺在一天结束离开办公室之前在存储库中存放一些东西。
A的时候,修改了一下此功能依赖的,且tracked by另一条功能分支B的文件(实际上这是常有的事),那么为了做好版本控制你不会将这个文件的修改提交到分支A上,但是在这种情况在git中,你还未提交时git...那么当需要回滚的文件在那次提交或者需要将发布的版本回滚时,就非常麻烦了... commands: git reset $ git status # on branch master #...来还原文件的内容 当我们需要将版本回滚到比较久远的一个状态,或者说在分支合并之前的状态时,可以用git checkout来回滚。...(你甚至可以做些修改并提交) // 保留当前的状态,在一个新建的分支上 $ git checkout -b hotfix // 强行回滚远程master到本地的hotfix分支的状态 $ git push...用过svn的都知道,svn是存在一个文件来存储账号密码的,那么在git中也是可以这么做的,只需要轻松的一次命令。
并不适合阅读的个人文档。 git revert 和 git reset 的区别 sourceTree 中 revert 译为提交回滚,作用为忽略你指定的版本,然后提交一个新的版本。...新的版本中已近删除了你所指定的版本。 reset 为 重置到这次提交,将内容重置到指定的版本。git reset 命令后面是需要加2种参数的:–-hard 和 –-soft。...执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。使用git status 命令可以在缓冲区中看到这些修改。...而如果加上-–hard参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。可以使用 git push origin HEAD --force 强制将分区内容推送到远程服务器。...当你回滚之后,又后悔了,想恢复到新的版本怎么办?
并不适合阅读的个人文档。 git revert 和 git reset 的区别 先看图: sourceTree 中 revert 译为提交回滚,作用为忽略你指定的版本,然后提交一个新的版本。...新的版本中已近删除了你所指定的版本。 reset 为 重置到这次提交,将内容重置到指定的版本。git reset 命令后面是需要加2种参数的:–-hard 和 –-soft。...执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。使用git status 命令可以在缓冲区中看到这些修改。...而如果加上-–hard参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。可以使用 git push origin HEAD --force 强制将分区内容推送到远程服务器。...当你回滚之后,又后悔了,想恢复到新的版本怎么办?
:.gitignore 有些文件是不需要同步的,如:三方库 以Apple开发举例:Pods文件夹下的所有三方库,可以根据Podfile用cocopods下载就行 需要忽略的文件可以用.gitignore...*(递归删除当前目录下的所有文件和子文件) 5、MV 重命名/移动 git mv readme readme.md(重命名文件) git mv readme dir(移动文件) 6、Stash 存储...apply(恢复最近一次存储) git stash apply stash@{2}(恢复某一次存储) git stash drop stash@{2}(删除某一次存储) 7、Pull 拉取 git pull...git reset (回滚提交记录,但本地代码不回滚) git reset --hard HEAD(撤销工作区和暂存区的所有内容,慎用!)...git reset --hard (回滚提交记录和本地代码) // reset会清掉指定commitID后的所有提交,已提交远端的记录回滚,慎用!!!
log”查看版本信息,此时本地的HEAD已经指向之前的版本: 2.2 重新设置一个版本号回滚 a.右击项目依次选中:git->Repository->Reset HEAD b....如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧: 所以我们要用“git push -f”强制推上去,就可以了: idea中打开Terminal,在本项目目录下,输入...意思是:该操作会重置当前分支指针到所选择的提交点,并且更新记录点和根据所选选项更新index状态。 意味着该项操作会影响两件事:提交的记录 和 当前工作区中的文件状态。...已经add到index(暂存区)的文件不会回滚,任然保留 4.2 Mixed Mixed模式:在选择的回退点之后的所有更改将会保留但不会被git追踪下来。...(见下图) 在解决冲突对话框中,决定最终的版本文件。
git add fil* 如何在Git中检查存储库的状态: 该命令将显示当前存储库的状态,包括暂存、未暂存和未跟踪的文件。...git mv oldfile newfile 如何忽略Git中的文件: 创建一个.gitignore文件并提交它 如何在Git中恢复未暂存的更改: git checkout filename 如何恢复Git...如何在Git中回滚最后一次提交: git revert将创建一个新的提交,它与给定提交的所有内容相反。...我们可以像这样使用head别名来恢复最新的提交: git revert HEAD 如何在Git中回滚旧的提交: 您可以使用它的提交id恢复旧的提交。这将打开编辑器,以便您可以添加一个提交消息。...使用这个命令可以找到远程存储库日志: git log origin/main 如何在Git中合并远程repo和本地repo: 如果远程存储库有你想要与本地合并的更改,那么这个命令会帮你完成: git merge
认识 Git 的四个工作区域 在盘点常见的代码回滚场景之前,有必要认识一下 Git 的四个工作区域。 平常我们 clone 一个代码库之后,本地看起来就是一个包含所有项目文件的目录。...本地仓库(.git) 在工作区中有个隐藏目录.git,这就是 Git 本地仓库的数据库。工作区中的项目文件实际上就是从这里签出(checkout)而得到的,修改后的内容最终提交后记录到本地仓库中。...回滚场景:仅在工作区修改时 当文件在工作区修改,还没有提交到暂存区和本地仓库时,可以用 git checkout -- 文件名 来回滚这部分修改。...Reflog - 恢复特定 commit 中的某个文件 场景:执行 reset 进行回滚,之后发现丢弃的 commit 中部分文件是需要的。...文件还是需要的,于是将该文件版本单独恢复到工作区中。
首先,经过之前的学习,我们起码知道,执行完 reset回滚commit以后,之前的commit其实没有被删除,肯定还在的。...可以新建一个分支指向对应的提交 git branch branchName commitId 找回删除的文件上面 撤销add 一节中我们用的命令并不会删除工作目录中的文件,但是万一你一不小心漏掉了 --...cached 参数,那效果就不一样了,会把工作目录和暂存区中的文件记录都会删除。...,那我们可以从暂存区里面把文件恢复出来:git checkout -- new.txt 如果我们是一开头的那种情况,用 git rm 命令,就会把暂存区和工作区都删除了,那还可以从最近的 commit...reset 命令操作的都是跟 commit 相关的,比如把分支重置到某次 commit,把某些文件重置到某次 commit对应的文件版本等。
译文 一款强大的Windows和Mac的免费Git客户端Sourcetree简化你如何与你的Git存储库使您可以专注于编码。可视化和通过Sourcetree简单的Git GUI管理你的知识库。...回滚提交 有些时候,我们提交的代码有问题,需要回滚回去。 git revert * 回滚某次提交 将某次变更(在Sourcetree里是某个节点)右键选择回滚提交。...回滚文件 回滚行 忽略文件 项目中,有一些文件夹是需要忽略,而不需要提交到仓库里,比如bin目录下、target目录下的文件。 这里支持忽略单个文件、忽略所有扩展名、或略文件夹下的一切等。...之后,我们不会看到这些文件变动。需要说明的是忽略文件,只能忽略未跟踪文件,如果已跟踪文件(之前被提交过),需要先将这些文件删除后,提交代码库,再次忽略文件。...重置到当前节点:这个功能蛮好用的,可以将目前的分支回滚到那一次的分支,然后将所有的文件变更显示出来,相当于回到当时准备提交的时候(包含之后的所有变动)。
版本控制的作用 自动生成备份 知道改动的地方 随时回滚 版本控制分类 1.本地版本控制 记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用 ?...由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用 ?...: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制....通过git add 状态变为Staged. Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态....checkout [file] # 恢复某个commit的指定文件到暂存区和工作区 $ git checkout [commit] [file] # 恢复暂存区的所有文件到工作区 $ git checkout
stash 存储文件等操作时,HEAD 并不会改变,这些修改从来没有被提交过,因此 reflog 也无法帮助我们恢复它们。...# 将所有未提交的修改(提交到暂存区)保存至堆栈中 $ git stash # 给本次存储加个备注,以防时间久了忘了 $ git stash save "存储" # 存储未追踪的文件 $ git stash...-u # 查看存储记录 $ git stash list 在 Windows 上和 PowerShell 中,需要加双引号 # 恢复后,stash 记录并不删除 $ git stash apply...# 回滚到最近的一次提交 # 如果修改某些文件后,没有提交到暂存区,此时的回滚是回滚到上一次提交 # 如果是已经将修改的文件提交到仓库了,这时再用这个命令回滚无效 # 因为回滚到的是之前自己修改后提交的版本...,这时候想要再拉取别人的分支是没用的,会显示 already-up 这时候可以回滚代码,重新拉取。
5.png 代码回滚之Reset、Revert、 Checkout 6.png Reset 将一个分支的末端指向另一个提交,可以用来移除当前分支的一些提交。...将文件从缓存区中移除 git checkout 提交层面 切换分支或查看旧版本 git checkout 文件层面 舍弃工作目录中的更改 git revert 提交层面 在公共分支上回滚更改 git...revert 文件层面 (然而并没有) 代码暂存之Stash git stash会把所有未提交的修改(包括暂存和未暂存的)都保存起来,用于日后恢复当前工作目录 保存一个不必要但日后又想查看的提交 切换分支前先暂存...# 推送所有分支到远程仓库 $ git push origin --all 撤销 # 恢复暂存区的指定文件到工作区 $ git checkout file # 恢复某个commit的指定文件到暂存区和工作区... # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 $ git reset commit-SHA # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定
git clone $ git clone http[s]://example.com/path/to/repo.git/ $ git clone ssh://example.com...* # 取消已经暂存的文件 git reset --mixed HEAD * # 同上 git reset --soft HEAD * # 重置到指定状态,不会修改索引区和工作树 git reset...--hard HEAD * # 重置到指定状态,会修改索引区和工作树 git reset -- files * # 重置index区文件 撤销操作 git revert HEAD # 撤销前一次操作...git revert HEAD~ # 撤销前前一次操作 git revert commit # 撤销指定操作 切换分支和恢复文件 git checkout -- file # 取消对文件的修改(...git rebase --onto master 169a6 # 限制回滚范围,rebase当前分支从169a6以后的提交 git rebase --interactive # 交互模式,修改commit
提交分3步:add、commit、push,回滚和撤销也分3种情况: 撤销add 撤销commit 回滚push,也就是回滚远程仓库的代码 撤销add 这种情况有可能是在 git add 操作的时候一些不必要的文件也加进来了...add 操作前面我们已经学习了,它的本质就是将工作目录中的文件的内容保存到了Git数据库,并把文件名和对应的数据对象这些信息添加到了暂存区中。...由于添加的文件内容已经添加到Git数据库中了,没法删除,所以我们不用管Git数据库中的。我们可以删除暂存区中的文件,以确保不会出现在提交记录中。...git rm —cached 是直接删除暂存区中的文件记录,用 git ls-files —stage 命令查看暂存区会发现对应文件的记录被删除了,工作区的内容不会变; git reset 是把内容恢复到指定的...需要重新add操作); soft:效果是暂存区和工作区的内容都不会变,也就是不撤销 add 操作; hard:这个效果是暂存区的内容会被替换,工作区之前被跟踪的文件内容会被替换 //回滚到上一次提交 git
版本控制 对于开发过程中的版本控制,主要氛围集中式和分布式 集中式(svn) svn因为每次存的都是差异 需要的硬盘空间会相对的小一点 可是回滚的速度会很慢 优点: 代码存放在单一的服务器上...(Git团队对代码做了极致的压缩 最终需要的实际空间比svn多不了太多 可是Git的回滚速度极快) 优点: 完全的分布式 缺点: 学习起来比SVN陡峭 git命令 常见的...git init C(新增) 在工作目录中新增文件 git status git add ./ git commit -m "msg" U(修改) 在工作目录中修改文件 git...合并分支 : git merge branchname 快进合并 --> 不会产生冲突 典型合并 --> 有机会产生冲突 解决冲突 --> 打开冲突的文件...git stash : 会将当前分支上的工作推到一个栈中 分支切换 进行其他工作 完成其他工作后 切回原分支 git stash apply : 将栈顶的工作内容还原 但不让任何内容出栈
删除条件(where) 不能用 不能用 可使用 回滚 不可回滚 不可回滚 可回滚 自增初始值 - 重置 不重置 接下来我们用案例来演示一下它们的区别。...4.回滚支持不同 delete 属于 DML 支持事务回滚操作,而 truncate 和 drop 属于 DDL,执行之后立马生效,且数据是不可恢复的,接下来我们来验证一下。...: 接下来我们演示一下 delete 的回滚操作,如下图所示: 从上述结果可以看出 delete 之后是可以进行恢复(回滚)的,而 truncate 和 drop 之后是不能回滚的,...5.自增初始化不同 delete 不会重置自增字段的初始值,如下图所示: 而 truncate 会重置自增字段的初始值,如下图所示: 6.执行速度不同 delete 是逐行执行的,并且在执行时会把操作日志记录下来...truncate 和 drop 是立即执行,且不能恢复;而 delete 会走事务,可以撤回和恢复。 truncate 会重置自增列为 1,而 delete 不会重置自增列。
领取专属 10元无门槛券
手把手带您无忧上云