在Git中,有以下几种方案可以实现 丢弃文件变更(即:撤消文件更改):
各个方案的详细原理和使用方式如下:
restore 命令主要用于恢复 工作区 和 暂存区 中的文件变更;所以,它是专为丢弃文件变更而设计的命令;
使用方式如下:
语法:
示例:
checkout 命令主要作用是用来签出指定分支的;但也可以用来签出指定的文件,我们可以利用这个特性来实现丢弃文件变更;
将指定的文件签出到指定提交的版本;
语法:
示例:
reset 命令的作用是将 HEAD 重置某个提交,它 *** 作的目标是提交历史;但该命令有个特性是可以将重置的变更(即重置后丢弃的变更)放在 暂存区 或 工作区中,也可以完会丢弃 并 重置暂时区 或 工作区;利用这个特性,我们可以实现丢弃文件变更的效果;
将当前 HEAD 重置到当前 HEAD,即不改变 HEAD 的位置,根据需要选择将 暂存区 或 工作区 重置到 HEAD 的状态;
示例:
1. git gui怎么查看文件修改记录在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:$ git log -- begin.txt可以添加不同的选项让输出的内容或格式有所不同。
$ git log -p -- begin.txt-p 选项可以输出每次提交中的diff, 但个人感觉会把输出搞得很长、很乱,不容易找到重点。个人比较喜欢的方式是:$ git log --pretty=oneline -- filename在log 命令中加入 --pretty=oneline 选项会让结果看起来清爽一些,但是只能看到ments,看不到提交的用户和日期。
2. git gui怎么查看文件修改记录在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:
$ git log -- begin.txt
可以添加不同的选项让输出的内容或格式有所不同。
$ git log -p -- begin.txt
-p 选项可以输出每次提交中的diff, 但个人感觉会把输出搞得很长、很乱,不容易找到重点。
个人比较喜欢的方式是:
$ git log --pretty=oneline -- filename
在log 命令中加入 --pretty=oneline 选项会让结果看起来清爽一些,但是只能看到ments,看不到提交的用户和日期。
3. git 获取历史版本的几种方式我们简单的描述一个例子:a)初始化 *** 作有两个文件file1.txt和file2.txt1, 初始化的时候就有这两个文件 *** 作:git initgit statusgit add .git mit -m “init version”2, 在master分支上修改了file1.txt,并提交 *** 作:(修改file1.txt)git add file1.txtgit mit -m “change file1”3, 然后新建分支banana,并切换到banana分支上 *** 作:git branch bananagit checkout banana4, 修改file1.txt和file2.txt,并提交。
*** 作:(修改file1.txt和file2.txt)git add file1.txt file2.txtgit mit -m “change by banana”这个时候,我们可以输入 gitk,查看一下当前的版本情况。如下图:git-0015, 然后,切换到master分支上,修改file2.txt,并提交。
*** 作:git checkout master(修改file2.txt)git add file2.txtgit mit -m “change by master”输入gitk,查看当前版本情况,如下图:git-002b)发现问题需要查看历史版本我们现在发现当前的版本有点问题,还不能提交到版本库。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以上的 *** 作,我们知道了如何查看版本分支,和如何回复到以前的版本。
4. git gui怎么在本地建版本库git怎么创建本地版本仓库安装git我就不用说了吧!下载地址:/msysgit/msysgit/releases/download/Git-1.9.4-preview20140815/Git-1.9.4-preview20140815.exe 安装完后 点击桌面Git Bash :命令如下$ mkdir testcms$ cd testcms$ pwd/Users/my-pc/testcmspwd命令用于显示当前目录。
在我的机器上,这个仓库位于\Users\my-pc\test\testcms。 如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:$ git initInitialized empty Git repository in /Users/my-pc/testcms/.git/瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的开发者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。
不过,不建议你使用自己正在开发的公司项目来学习Git,否则造成的一切后果概不负责。把文件添加到版本库首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。
版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
使用Windows的童鞋要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。
建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可:set-utf8-notepad++言归正传,现在我们编写一个test.txt文件,内容如下:Git is a version control system.Git is free software.一定要放到testcms目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令git add告诉Git,把文件添加到仓库:$ git add test.txt执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。第二步,用命令git mit告诉Git,把文件提交到仓库:$ git mit -m "wrote a test file"[master (root-mit) cb926e7] wrote a test file 1 file changed, 2 insertions(+) create mode 100644 test.txt简单解释一下git mit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
git mit命令执行成功后会告诉你,1个文件被改动(我们新添加的test.txt文件),插入了两行内容(test.txt有两行内容)。为什么Git添加文件需要add,mit一共两步呢?因为mit可以一次提交很多文件,所以你可以多次add不同的文件,比如:$ git add test1.txt$ git add test2.txt$ git add test3.txt$ git mit -m "add 3 files."现在总结创建git仓库分为三步:第一步 初始化一个Git仓库,使用git init命令。
添加文件到Git仓库:•第二步,使用命令git add ,注意,可反复多次使用,添加多个文件;•第三步,使用命令git mit,完成。这种用命令的方式感觉还是用svn好用,但是对于分布式版本控制来说git是最好的选择。
5. windows下git怎么查看提交历史1.查看Git日志:
命令:git log 默认不加参数,git日志会按照最新的日期从上往下显示 参数:-p 显示版本间的代码差异
-数字 显示部分的提交
-哈希值 显示指定的版本
2.指定查找范围:
--since="5 hours" 显示最近5小时内的提交 --since="5 hours" -1 显示5小时内的最后一个提交 --before 用法和--since的用法差不多,显示的是在某个时间点之前的提交 版本1..版本2 说明:版本1之后到版本2的所有提交,版本2可以用 HEAD(要注意大写)表示当前的最新版本 版本^ 回溯一个版本 注意: 在windows下要加双引号"版本^" ~N: 回溯N个版本
3.查看指定版本之间的差异
git diff 版本号 说明:当前目录树和对应版本号的差异 git diff --stat 说明:统计对应改动的代码量
4.撤销修改
4.1增补修改(只能用于针对最后一个提交)
git mit -C HEAD -a --amend
4.2反转提交
创建一个新的反向的提交来抵消原来的提交
git revert -n HEAD 反转当前版本库最新的提交并且缓存起来。但是不提交
4.3复位
git reset --soft 缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset --hard 同时删除提交 例子:git reset --hard HEAD^ 复位到HEAD之前的那个版本
5重新改写历史记录
什么时候需要改写历史记录?
给历史记录重新排序
多个提交合并成一个提交
一个提交分解成多个提交
git rebase -i HEAD~3
本质上利用的是变基 *** 作,定位到你想变化的范围之前。然后进入编辑器去修改你想修改的部分。完成之后再回到当前的末梢。
6. 怎样使用webstorm查看一个文件在git中的变动首先,我们打开webstorm软件,然后找到项目里面的同时也在版本库中存在的文件。
打开文件后,我们点击编辑器上方菜单中"VCS"选项,在d出的菜单列表中选择“GIT”
点击后又会有一个级联菜单出现,里面的选项基本上就是git的一些常见 *** 作,我们选择“show history”选项,来查看文件的历史版本及相应改动。
我们可以看到软件下方有一个d出的界面有在这个文件名字下面有一个表格,表格的标题依次对应的是“版本号”、“日期”、“作者”、“mit信息”
然后我们随便点击一个版本所在行,就会d出一个两个版本的文件的比较界面,左边是上一个版本,右边是最新版本
两个版本相比较,以行的变动作为变动,我们可以看到绿色背静的代码是新添加的,蓝色背景的是有改动的部分。
7. windows下git怎么查看提交历史给历史记录重新排序多个提交合并成一个提交一个提交分解成多个提交git rebase -i HEAD~3本质上利用的是变基 *** 作,定位到你想变化的范围之前.指定查找范围:--since="5 hours"。
然后进入编辑器去修改你想修改的部分:版本1之后到版本2的所有提交,版本2可以用 HEAD(要注意大写)表示当前的最新版本 版本^ 回溯一个版本 注意: 在windows下要加双引号":git log 默认不加参数,git日志会按照最新的日期从上往下显示 参数; -1 显示5小时内的最后一个提交 --before 用法和--since的用法差不多:-p 显示版本间的代码差异-数字 显示部分的提交-哈希值 显示指定的版本2..版本2 说明;版本^" ~N: 回溯N个版本3; 显示最近5小时内的提交 --since="5 hours".3复位git reset --soft 缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset --hard 同时删除提交 例子:git reset --hard HEAD^ 复位到HEAD之前的那个版本5重新改写历史记录什么时候需要改写历史记录,显示的是在某个时间点之前的提交 版本1.查看指定版本之间的差异git diff 版本号 说明:当前目录树和对应版本号的差异 git diff --stat 说明:统计对应改动的代码量4.撤销修改4.1增补修改(只能用于针对最后一个提交)git mit -C HEAD -a --amend4.2反转提交创建一个新的反向的提交来抵消原来的提交git revert -n HEAD 反转当前版本库最新的提交并且缓存起来。但是不提交41.查看Git日志:命令。
8. 如何使用git gui提交代码在windows系统客户端安装git工具。
注:如何安装git工具在此不做介绍,如需了解可网上搜索安装介绍。
在“本地文件”中添加“.git文件”,用于git管理。
进入本地文件夹,右击鼠标-单击Git Init Here-生成.git文件夹。
在github创建仓库用于存储管理本地文件,示例:Blog。
点击账号前的加号(Create New)--New repository,根据引导创建一个Blog仓库。
远程添加github上的Blog仓库。
1)进入本地文件夹下-右击鼠标-Git Gui-远端(remote)-Add。
2)获取github中Blog仓库的地址。
3) 在Add Remote窗口中填写名字、Location。
名字:Blog
Location:粘贴刚刚复制的Blog仓库路径
最后单击“Add”。
将本地文件内容即“已缓存的改动”,提交git管理的master分支上。
将本地文件上传到github上去。
单击Git Gui界面“上传”--“上传”窗口随意勾选一个或多个传输选项--点击“上传”--上传Blog过程中需要输入github的登录账号和密码。
在github上查看本地文件Blog项目是否上传成功。
END
注意事项
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)