Ⅰ git获取历史版本的几种方式
我们简单的描述一个例子:
a)初始化操作
有两个文件file1.txt和file2.txt
1, 初始化的时候就有首配这两个文件
操作:
git init
git status
git add .
git mit -m “init version”
2, 在master分支上修改了file1.txt,并提交
操作:
(修改file1.txt)
git add file1.txt
git mit -m “change file1”
3, 然后新建分支banana,并切换到banana分支上
操作:
git branch banana
git checkout banana
4, 修改file1.txt和file2.txt,并提交。
操作:
(修改file1.txt和file2.txt)
git add file1.txt file2.txt
git mit -m “change by banana”
这个时候,我们可以输入 gitk,查看一下当前的版本情况。
如下图:git-001
5, 然后,切换到master分支上,修改file2.txt,并提交。
操作:
git checkout master
(修改file2.txt)
git add file2.txt
git mit -m “change by master”
输入gitk,查看当前版本情况,如下图:git-002
b)发现问题需要查看历史版本
我们现在发现当前的版本有点问题,还不能提交到版本库。
1,我们需要从git mit中返回.
则输入:
git reset --soft HEAD^
解释一下,HEAD是当前分支的最新版本。
^表示父节点。
当前节点的父节点,就是上一次提交的版本。
也就是标记为“change file1”的版本。
问为什么不是”change by banana”这个版本呢者扒指?不同的分支哦。
”change by banana”是banana分支的最新代码,和master分支不同的。
这个时候输入
git status
看看,是不是显示file2.txt修改了没有提交呢。
2,我们需要从git add中返回
再仔细查看之后,我们发现file2.txt真的写错了,需要返回到此悔git add之前的状态。
输入:
git reset -q file2.txt
这个时候,file2.txt就回到了解放前了。
用git status查看一下,file2.txt是”change not staged for mit”状态。
3,回到没有做过的情况
我们最终确定,最后一次修改的file2.txt是无用的代码,我们需要废弃掉。
注意,这个操作不能恢复的哦。
git reset --hard
这个命令,不能指定具体的文件。
是把当前的修改全部清除,恢复到最后一次提交的版本。
这个时候,用gitk查看一下:git-003
已经彻底回复到了“change file 1”的版本了。
4,直接回复到某个版本
我们现在切换到banana分支。
git checkout banana
然后用gitk看一下。
可以看出,我们之前的操作,对banana分支一点影响也没有。
现在我们需要把banana分支回复到初始状态,但是当前的改动的代码还是需要留着。
我们可以看,init版本是当前版本的父节点的父节点。
我们可以这么操作:
git reset --soft HEAD^^
然后用gitk看一下:git-004
最近的版本已经变成了init version了。
所有的改动都是add未提交状态。
5,得到当前最新代码
最后。
我们把file1.txt和file2.txt都删掉。
我们需要从版本库中取得当前最新的代码。
很简单:
git checkout master
如果是要banana分支的最新代码,则:
git checkout banana
以上的操作,我们知道了如何查看版本分支,和如何回复到以前的版本。
Ⅱ git如何撤销pull命令。
git撤销pull命令的方法和操作步骤如下:
1、首先,输入1,然后按Enter键进入项目的git存储库所版在的文件夹,如下图权所示。
Ⅲ git 代码上传后,怎么回退版本
总有一天你会遇到下面的问题.
(1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚.
(2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚.
这些开发中很常见的问题,所以git的取消提交,回退甚至返回上一版本都是特别重要的.
大致分为下面2种情况:
1.没有push
这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题,准备取消提交,用到下面命令
reset
git reset [--soft | --mixed | --hard
上面常见三种类型
--mixed
会保留源码,只是将git commit和index 信息回退到了某个版本.
git reset 默认是 --mixed 模式
git reset --mixed 等价于 git reset
--soft
保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
--hard
源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
当然有人在push代码以后,也使用 reset --hard <commit...> 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现权是冲突.....
所以,这种情况你要使用下面的方式
2.已经push
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令
revert
git revert用于反转提交,执行evert命令时要求工作树必须是干净的.
git revert用一个新提交来消除一个历史提交所做的任何修改.
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)
revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.
git revert
通常,前几位即可
git revert c011eb3
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
看似达到的效果是一样的,其实完全不同.
第一:
上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
第二:
如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三:
reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
Ⅳ 【学了就忘】Git后悔药 — 34.版本回退操作(三)
git reset --hardcommit-id 命令:回退到指定版本。(hard:强硬,严格的回退)
该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本。
(提示:该命令慎用。)
示例开始:
首先在版本库中的 readme.txt 文件中添加一行内容,并提交该内容。我们的目的就是要再回退到该版本。
1)查看本地版本库日志
2)向 readme.txt 文件中新增一行数据,并提交到本地版本库
3)现在比对工作区与暂存区、暂存区与本地版本库的差异
我们可以看到此时,工作区、暂存区与本地版本库中的 readme.txt 文件状态无差异。
4)开始回退操作,退回到V3版本
使用 git reset --hard HEAD^ 命令,退回到前一个版本。
说明:
HEAD is now at 529ad74 第3次提交,新增内容:readme.txt file v3
意思:HEAD现在位于commit-id为 529ad74 的提交,提交说明为: 第3次提交,新增内容:readme.txt file v3 。
5)回退后,对比工作区、暂存区与本地库中版本中文件的差异
回退后,我们再次对比了工作区、暂存区与本地库中版本中文件的差异:没有内容差异,完全一样。
说明:工作区、暂存区和本地库中的内容,都回退到了之前的版本。(重要)
6)查看本地版本库的提交日志信息
从上我们可以看到:(重点)
7)恢复到回退前版本
上面说了,使用 git reset --hard 命令回退,做了三个操作:
我们现在来查看一下工作目录中的文件状态。
可以看到工作目录中是非常干净的。
所以若要恢复到回退之前的版本,只能使用 git reset --hard 命令回退。
我们查看到, readme.txt 文件的内容已经完全恢复。
Ⅳ 如何用 Git 将代码恢复到一个历史的版本
有些时候,在一些特殊情况下,我们需要将代码恢复到一个历史的提交版本上。而这个历史提交版本,离最新的提交已经比较久远了。
比如,我希望将如下的仓库的提交,恢复到上上上上次提交。当然,我可以一次一次的 revert,但是有没有更快更简单的办法呢?
暴力的方式
如果你的仓库是自己在用(不影响别人),那么你可以使用 git reset --hard <target_commit_id> 来恢复到指定的提交,再用 git push -f 来强制更新远程的分支指针。为了保证万一需要找回历史提交,我们可以先打一个 tag 来备份。
对于刚刚的例子,需要执行的命令就是:
// 备份当前的分支到 backup_commit
git tag backup_commit
git push origin backup_commit
// 重置 source 分支
git reset --hard 23801b2
// 强制 push 更新远程分支
git push origin source -f
温和的方式
如果你的仓库是多人在协作,那么你这么操作会使用别人本地的代码库混乱,所以只能建一个新的提交,这个新的提交中把想取消的提交都 revert 掉,那么具体应该如何做呢?方法如下:
首先,和刚刚一样,用 git reset --hard 23801b2 将代码切换到目标提交的 id。接下来,用 git reset --soft origin/source 命令,将当前代码切换回最新的提交。
执行完上面两步后,你的仓库还是最新的提交,但是工作区变成了历史的提交内容,这个时候用 git add 和 git commit 即可。最终完成的效果如下:
不过经过念茜的提醒,该方法需要保证 reset 的时候没有别人做新的提交,如果有的话,会一并把别人的提交也撤销了。所以还是挺危险的,慎用。
虽然用到的时候很少,但是理解它的原理有助于大家理解 Git 的工作区,暂存区和版本库的各种指针操作的意义,希望对大家有用。
Ⅵ Android studio项目怎么使用git版本返回到上个版本
如果开发当前的项目中,对项目的代码编写错误了,导致这些功能无法返回了,如果对项目没有很好进行管理的话,那么这样整个文件就需要重新开发了,如果有通过git提交代码仓库中,就可以使用git的方法,把对项目版本进行回退上一次提交的版本中,就可以再次对上一个版本开发。
1、需要在项目中导入正在开、项目文件,也已提交的项目到仓库中文件,然后就可点击菜单中的“CVS”的选项。
2、点击完菜单中CVS的选项之后,就会弹出了一个下拉的菜单中,进行下拉的菜单中的git的选项。
3、这样就会弹出了一个下一级的菜单,在下一级的菜单中找到一个为“reset HEAD”的选项,点击进入这个菜单。
4、弹出了一个reset Head的选项中,要把项目到电脑中路径的,在git root的进行选择路径。对需要进行回退的版本信息进行确认,可以进行点击“Validate”的选项。
5、弹出一个上一个版的提交的过的文件的信息,根据这些文件是否需要把这些的文件回退到当前到项目中,确认完成之后,点击close关闭窗口。
6、开始进行对把项目回退到上一个版本中,如果要进行回退到上上一个版本话,可以把to commit的中HEAD~1,就可以回退到上上一个版本,点击Reset开始回退。
7、可以通过查看log的信息项目从代码仓库中是否回退成功,可以在log信息并没有提示错误信息,是回退成功的。也可以通过代码的代码来查看是否回退成功。