gitdiff指定head和上一个head的差异是工作区和本地仓库的区别。根据查询相关信息可知,这一版本的代码和上一版本的代码区别,就得使用gitdiffHEAD^我们知道到HEAD代码本地仓库的最新版本,那么上最新版本的上一个版本就用HEAD^表示。
注意:HEAD不是一个分支,只是指向某个COMMIT的指针,git reflo(查看所有分支的所有 *** 作记录(包括commit和reset的 *** 作,包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录)
一、git 获取历史版本的几种方式
我们简单的描述一个例子:a)初始化 *** 作有两个文件file1txt和file2txt1, 初始化的时候就有这两个文件 *** 作:git initgit statusgit add git mit -m “init version”2, 在master分支上修改了file1txt,并提交 *** 作:(修改file1txt)git add file1txtgit mit -m “change file1”3, 然后新建分支banana,并切换到banana分支上 *** 作:git branch bananagit checkout banana4, 修改file1txt和file2txt,并提交。
*** 作:(修改file1txt和file2txt)git add file1txt file2txtgit mit -m “change by banana”这个时候,我们可以输入 gitk,查看一下当前的版本情况。如下图:git-0015, 然后,切换到master分支上,修改file2txt,并提交。
*** 作:git checkout master(修改file2txt)git add file2txtgit 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看看,是不是显示file2txt修改了没有提交呢。
2,我们需要从git add中返回再仔细查看之后,我们发现file2txt真的写错了,需要返回到git add之前的状态。输入:git reset -q file2txt这个时候,file2txt就回到了解放前了。
用git status查看一下,file2txt是”change not staged for mit”状态。3,回到没有做过的情况我们最终确定,最后一次修改的file2txt是无用的代码,我们需要废弃掉。
注意,这个 *** 作不能恢复的哦。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,得到当前最新代码最后。
我们把file1txt和file2txt都删掉。我们需要从版本库中取得当前最新的代码。
很简单:git checkout master如果是要banana分支的最新代码,则:git checkout banana以上的 *** 作,我们知道了如何查看版本分支,和如何回复到以前的版本。
二、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撤销修改
41增补修改(只能用于针对最后一个提交)
git mit -C HEAD -a --amend
42反转提交
创建一个新的反向的提交来抵消原来的提交
git revert -n HEAD 反转当前版本库最新的提交并且缓存起来。但是不提交
43复位
git reset --soft 缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset --hard 同时删除提交 例子:git reset --hard HEAD^ 复位到HEAD之前的那个版本
5重新改写历史记录
什么时候需要改写历史记录?
给历史记录重新排序
多个提交合并成一个提交
一个提交分解成多个提交
git rebase -i HEAD~3
本质上利用的是变基 *** 作,定位到你想变化的范围之前。然后进入编辑器去修改你想修改的部分。完成之后再回到当前的末梢。
三、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撤销修改41增补修改(只能用于针对最后一个提交)git mit -C HEAD -a --amend42反转提交创建一个新的反向的提交来抵消原来的提交git revert -n HEAD 反转当前版本库最新的提交并且缓存起来。但是不提交41查看Git日志:命令。
四、怎么查看ubuntu git版本git查看提交历史
这是git中使用平率非常高的一个 *** 作,git中查看提交历史的功能也非常强大,提供各种筛选和输出格式定制功能。
最简单的,运行git log命令,你将看到一个详细的提交日志:
git-log
# 当然也可以只查看某个版本
$ git log fd0a1b2
信息内容都很好理解,重点说说第一行mit后这个40个字符的字符串,这是该次提交的对应的SHA-1值,在git中,会对提交(mit)、文件(blob)、目录(tree)、标签(tag)生成一个唯一的SHA-1值,git就是基于此来得知文件或目录的改动,因为这四类对象计算得到的SHA-1值都是唯一的,同时你也可以直接使用SHA-1值来指代相应的对象。比如:
$ git show bdd3996
# 查看某个版本下具体某个文件
$ git show bdd3996 README
git log还有很多命令选项来定制历史记录
选项 说明
-(n) 仅显示最近的 n 条提交
–since,–after 仅显示指定时间之后的提交
–until,–before 仅显示指定时间之前的提交
–author 仅显示指定作者相关的提交
–mitter 仅显示指定提交者相关的提交
–reverse 按时间倒序显示
-p 按补丁格式显示每个更新之间的差异
–stat 显示每次更新的文件修改统计信息
–shortstat 只显示 –stat 中最后的行数修改添加移除统计
–name-only 仅在提交信息后显示已修改的文件清单
–name-status 显示新增、修改、删除的文件清单
–abbrev-mit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
–relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
–graph 显示 ASCII 图形表示的分支合并历史
五、Git怎么还原上一个版本第一步: git log 查看之前的mit的id,找到想要还原的版本第二步: git reset --hard 44bd896bb726be3d3815f1f25d738a9cd402a477 还原到之前的某个版本第三步: git push -f origin master 强制push到远程 前两步在eclipse中也可 *** 作: team --> show in hostory 找到想还原的版本 然后再强制push (git push -f origin master)。
六、如何用 Git 将代码恢复到一个历史的版本有些时候,在一些特殊情况下,我们需要将代码恢复到一个历史的提交版本上。
而这个历史提交版本,离最新的提交已经比较久远了。比如,我希望将如下的仓库的提交,恢复到上上上上次提交。
当然,我可以一次一次的 revert,但是有没有更快更简单的办法呢?暴力的方式如果你的仓库是自己在用(不影响别人),那么你可以使用 git reset --hard 来恢复到指定的提交,再用 git push -f 来强制更新远程的分支指针。为了保证万一需要找回历史提交,我们可以先打一个 tag 来备份。
对于刚刚的例子,需要执行的命令就是:// 备份当前的分支到 backup_mitgit tag backup_mitgit push origin backup_mit// 重置 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 mit 即可。最终完成的效果如下:不过经过念茜的提醒,该方法需要保证 reset 的时候没有别人做新的提交,如果有的话,会一并把别人的提交也撤销了。
所以还是挺危险的,慎用。虽然用到的时候很少,但是理解它的原理有助于大家理解 Git 的工作区,暂存区和版本库的各种指针 *** 作的意义,希望对大家有用。
七、git怎么查询当前分支的版本号#git reflog git log --pretty =oneline结果如下:69e1506ad9fed9771b9f7d1e478ac2ff05fc3604 Add git user profile functions for prompt displayc4582777fc50162d8b433cabad34f629b0ea9b98 Merge pull request #4957 from TorrentKatten/mastere8a9d0ee1a97033fb4aa371263889b77200b6d62 localization support for clock in candy themec3b3de5f29b72b45393b62d794450ad3a72703a8 Merge pull request #4956 from RobLoach/asdf616ac67924212df2f75139c94ca323f13f249dc6 Add 'asdf' plugin。
1初始化Git本地仓库:
git init
2Git添加远程仓库:
git remote add origin 你的远程仓库地址>
3Git 克隆远程仓库:
git clone 需要克隆的远程仓库地址>
4添加文件到Git仓库:
git add 需要添加的文件>
或:
git add (PS:"add " 表示把当前路径下的所有文件都添加到Git仓库)
5把文件提交到Git仓库(PS:提交之前,需要先添加):
git commit -m"你的提交说明>"
6把本地提交的文件推送到远程仓库:
git push -u origin 你的分支>
如果之前提交有时间使用 "-u",则可以使用:
git push
7查看所有分支:
git branch
PS:如下表示有两个分支,master分支和dev分支,表示当前分支
master
dev
8创建新分支:
git branch 分支名称>
9切换分支:
git checkout 分支名称>
10创建分支且切换到新分支:
git checkout -b 分支名称>
PS: 等价于
git branch 分支名称>
git checkout 分支名称>
11删除分支:
git branch -d 分支名称>
12合并指定分支到当前分支:
git merge 指定分支名称>
13Git 变基:
git rebase 指定分支名称>
14基于最新的提交创建标签:
git tag 标签名称>
15删除指定标签:
git tag -d 指定标签名称>
16列出所有的本地标签:
git tag
17查看所有的提交 历史 :
git log
18查看指定文件的提交 历史 :
git log -p 指定文件>
19以列表方式查看指定文件的所有提交 历史 :
git blame 指定文件>
20隐藏工作现场, 工作内容暂不提交:
git stash
PS:在临时需要处理紧急bug,当前代码又不想提交的情况下,使用该条指令较为方便
21恢复之前隐藏的工作现场:
git stash apply
PS:恢复工作现场之后,stash的内容并不会删除
22删除工作现场(在恢复工作现场之后使用):
git stash drop
23恢复工作现场并删除stash内容
git stash pop
24版本回退到上一个版本:
git reset --hard HEAD^
PS:^的个数表示回退版本的个数,例如回退3个版本:
git reset --hard HEAD^^^
25版本回退到指定版本:
git re set --hard 指定版本号>
PS:可以通过git log 可以查看版本号,回退是,指定版本号可以不写全,写前几位即可
26查看远程版本库信息:
git remote -v
28查看指定远程版本库信息:
git remote show 指定版本库>
29从远程仓库获取代码:
git fetch 远程仓库>
30下载远程仓库代码并合并到本地:
git pull 远程仓库> 远程分支>
31上传所有标签:
git push --tags
32状态查询:
git status
git config —global username “Nshen” //必须
git config —global useremail “ nshen121@gmailcom ” //必须
git config —global colorui “always” //或者"auto", always不仅Base环境是彩色,Dos里也是彩色的。
git config —global coreeditor notepadexe //设为windows记事本
git config —global aliasci “commit” //别名缩写
git config —global mergetool //可以设置合并工具
git config —global —list //查看设置
其实最后这些设置都保存在C:\Documents and Settings\用户名gitconfig 文件下(windows)
查看帮助: git help command
git init
git add txt //添加所有txt文件
git add README //添加单个文件
git add //添加所有文件包括子目录,但不包括空目录
add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)注意每次修改后都要重新add,不然就会提交之前add时的版本。
git add -i //进入交互式add
git add -p //直接进入补丁模式,可以暂存修改的一部分。
git commit -m “initial project version”
git commit -m “something” someFile //提交指定文件
git commit -C HEAD -a —amend //复用HEAD留言,增补提交(修改小错误,而不增加提交记录,掩盖自己的小马虎)
-m “提交的说明”
-a 动把所有已经跟踪过的文件暂存,并提交(工作目录中修改过的文件都提交到版本库,不需一个一个手动add了)
—amend 增补提交
-C 复用指定提交的提交留言
-c 打开编辑器在已有的提交基础上编辑修改
eg 修改最后一次提交:
git commit -m 'initial commit'git add forgotten_filegit commit --amend
如果没有修改就相当于更改提交说明,上边3个命令得到一个提交
忽略提交的文件:
所有人都需要忽略的文件要写在gitignore文件里,而只有自己的个人偏好需要忽略的文件要写在git/info/exclude文件中
# 此为注释 – 将被 Git 忽略a # 忽略所有 a 结尾的文件!liba # 但 liba 除外 [oa] # 忽略以o或a结尾的文件 ~ # 忽略以~结尾的文件/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODObuild/ # 忽略 build/ 目录下的所有文件doc/ txt # 会忽略 doc/notestxt 但不包括 doc/server/archtxt查看文件改动:
git diff // 比较工作目录与缓存区的区别
git diff —cached 或者 git diff —staged //缓存区与版本库里的区别
git diff HEAD //三者的区别
(请注意,单单 git diff 不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异。所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。)
git diff 18f822e //18f822e这个版本与当前目录的区别
git diff aaaaabbbbb //比较aaaaa与bbbbb之间差别
git diff —stat可以统计数据,比较特别的命令
重命名,移动,删除文件:
git mv file_from file_to //改名或移动
$ git mv READMEtxt README$ git status# On branch master# Your branch is ahead of 'origin/master' by 1 commit## Changes to be committed:#(use "git reset HEAD <file>" to unstage)## renamed: READMEtxt -> README
其实,运行 git mv 就相当于运行了下面三条命令:
$ mv READMEtxt README
$ git rm READMEtxt
$ git add README
必须调用 git rm 文件名 //从暂存区移除,并且文件也被删除
如果只是手工删除了文件,运行git status时会出现
# Changed but not updated:#(use "git add/rm <file>" to update what will be committed)## deleted: gritgemspec
此时必须再运行 git rm 文件名,才会在提交时候不再纳入版本管理
如果删除之前修改过并且已经add到缓存区了的话,则必须强制删除 -f
另外一种情况是,我们想把文件从Git仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆a编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 gitignore 文件中补上,用 —cached 选项即可:
git status
$ git status# On branch master# Changes to be committed: //只要在这行后边的,说明放入暂存区了#(use "git reset HEAD <file>" to unstage) //想取消放入缓存 git reset HEAD README## new file: README# Changed but not updated: //跟踪文件内容改变,但还没有放到暂存区,需要git add 命令才会放到暂存区#(use "git add <file>" to update what will be committed)#(use "git checkout -- <file>" to discard changes in working directory) //删除修改,恢复到之前版本,有危险 (如果想保留并且回退版本用stashing 和分支来处理)# modified: benchmarksrb查看提交历史:
git log
这时“j”向下浏览,“k”向上浏览,“q”退出
git log —pretty=oneline //一行显示
—pretty=“%h %s” //以各种格式输出
git log –p -2 //-p显示每次提交的内容差异 -2表示最近2次更改
git log —since “5 hours”
—since “3 hours”
—since “1 minute”
—before =“2008-1001”
git log 27j34j3j03u43u23 //最老版本最新版本(不包括起点只包括终点)
git log 34j4j4HEAD
git log fhfs8fh //省略HEAD
git log “HEAD^ ”“HEAD ” //windows必须加引号表示回溯上一个提交
git log -1 HEAD~1 //相当于git log -1 HEAD^
git blame hellohtml //你也可以用"-L"参数在命令(blame)中指定开始#####和结束行:
git blame -L 12,+10 hellohtml //12到22行
blame还可以跟踪内容复制,文件复制,略,见版本控制之道 79页
git checkout head 文件名 //撤销暂存区的修改
git checkout head readmetxt todotxt
git checkout head txt
git checkout head //撤销所有
git revert HEAD //创建一个反向的新提交抵消原来的提交改动
如果需要反转多个,必须从最后的开始反转, 加 -n可以不马上提交,之后一起提交。
git revert -n HEAD
git revert -n 54efhds
git commit -m “revert head and 54efhds”
git reset —hard HEAD //所有未提交的内容清空,这会让"git diff" 和"git diff —cached"命令的显示法都变为空
git reset —soft HEAD //复位版本库,暂存差异,便于提交中发现错误需要更改时有用(例如私人密码放到里边了)
分支:在当前分支末梢建立分支:
git branch RB_10(建立分支不会自动切换过去)
git checkout RB_10(切换到RB_10分支)
创建并切换分支:
git checkout -b RB_10(简化上边2步 *** 作)
git branch -d RB_10
基于某次提交、分支或标签创建新分支:
git branch RB_10 master
git branch RB_10 6fe57de0
git branch Rb_101 10
git branch -r //显示远程分支
git branch -a //列出所有分支
git branch -m master mymaster
-M 大写M会覆盖同名的分支
直接合并:
git merge 想合并到当前分支的源分支名
git merge —no-commit 分支 //合并但不提交
压合合并:将分支压合成一条commit记录,并合并过来
git merge —squash 某bug分支
git commit -m “修复某bug”
拣选合并:只合并一个提交
git cherry-pick 321d76f
如果需要连续拣选,就需要加 -n参数
然后再git commit ,但不要加-m参数,编辑器就会使用刚拣选的提交留言作为现在的留言。
标签Tag:查看标签:
git tag
git tag 10 //在当前分支最后一次提交创建标签
git tag 10 RB_10 //基于RB_10分支的最新踢脚创建标签
git tag 10 ae468d8kt //为某次提交创建标签
git checkout 10 //检出标签与检出分支一样 *** 作,但检出标签后用git branch查看本地分支会发现你现在不再任何分支上
这时你不应该修改,而应该立即基于此标签创建一个分支
git checkout -b from-10
1)git rebase RB_101 //也许修改过一个bug,希望新版本变基到RB_101分支上
2)手动解决冲突 //如果解决不了直接git rebase -abort来跳过特定提交或完全放弃变基
3)git add xxxhtml //冲突解决
4)git rebase —continue
git rebase --onto HEAD^^ HEAD^ HEAD
//—onto参数可以改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。
rebase -i 可以排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
详见版本控制之道p86 ,需要编辑器支持,windows记事本不行
远程相关:
git clone git://githubcom/schacon/gritgit //从现有仓库克隆
git clone git://githubcom/schacon/gritgit mygrit //换名,唯一区别就是新建的目录成了mygrit,其他都一样
git remote add pb git://githubcom/paulboone/ticgitgit
clone会默认添加origin仓库,如果原本用git init创建的版本库,后来又想提交到远程版本库,就可以用下边的办法
git remote add origin git@examplecom :/xxxxxx
git remote -v //查看远程仓库,默认clone后,应该有一个origin仓库,-v显示对应的clone地址
git remote show origin //查看远程仓库信息
git remote rename pb paul
git remote rm paul
git fetch [remote-name] 拉取远程仓库到本地远程仓库,不自动合并 //$ git fetch origin$ git fetch pbremote: Counting objects: 58, doneremote: Compressing objects: 100% (41/41), doneremote: Total 44 (delta 24), reused 1 (delta 0)Unpacking objects: 100% (44/44), doneFrom git://githubcom/paulboone/ticgit [new branch] master -> pb/master [new branch] ticgit -> pb/ticgit
现在pb/master可以在本地访问了,你可以合并到自己的某个分支,或者切换到这个分支看看有什么有趣的更新
git pull 抓取数据合并到工作目录中当前分支
git push [remote-name] [branch-name] //默认为 git push origin master
git push origin serverfix //推送分支,其实是下边一句的简化,提取我的 serverfix 并更新到远程仓库的 serverfix
git push origin serverfix:serferfix
git push origin :serverfix //这个语法用于删除,只要把分号前留空
git gc //垃圾回收,每隔一段时间例如一个月运行一次可以减少磁盘占用空间。
git reflog //最后的保障,列出误删的东东
git bisect //二分查找,版本控制之道p124页,略
归档版本库,导出压缩包:
git archive —format=格式 —prefix=目录/ 版本>压缩包zip
git archive —format=zip head>testzip
git archive —format=tar —prefix=mysite-10/ 10 | gzip>mysite-10targz
git archive —format=zip —prefix=mysite-10/ 10 >mysie-10zip
1 git gui怎么查看文件修改记录
在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:$ git log -- begintxt可以添加不同的选项让输出的内容或格式有所不同。
$ git log -p -- begintxt-p 选项可以输出每次提交中的diff, 但个人感觉会把输出搞得很长、很乱,不容易找到重点。个人比较喜欢的方式是:$ git log --pretty=oneline -- filename在log 命令中加入 --pretty=oneline 选项会让结果看起来清爽一些,但是只能看到ments,看不到提交的用户和日期。
2 git gui怎么查看文件修改记录在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:
$ git log -- begintxt
可以添加不同的选项让输出的内容或格式有所不同。
$ git log -p -- begintxt
-p 选项可以输出每次提交中的diff, 但个人感觉会把输出搞得很长、很乱,不容易找到重点。
个人比较喜欢的方式是:
$ git log --pretty=oneline -- filename
在log 命令中加入 --pretty=oneline 选项会让结果看起来清爽一些,但是只能看到ments,看不到提交的用户和日期。
3 git 获取历史版本的几种方式我们简单的描述一个例子:a)初始化 *** 作有两个文件file1txt和file2txt1, 初始化的时候就有这两个文件 *** 作:git initgit statusgit add git mit -m “init version”2, 在master分支上修改了file1txt,并提交 *** 作:(修改file1txt)git add file1txtgit mit -m “change file1”3, 然后新建分支banana,并切换到banana分支上 *** 作:git branch bananagit checkout banana4, 修改file1txt和file2txt,并提交。
*** 作:(修改file1txt和file2txt)git add file1txt file2txtgit mit -m “change by banana”这个时候,我们可以输入 gitk,查看一下当前的版本情况。如下图:git-0015, 然后,切换到master分支上,修改file2txt,并提交。
*** 作:git checkout master(修改file2txt)git add file2txtgit 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看看,是不是显示file2txt修改了没有提交呢。
2,我们需要从git add中返回再仔细查看之后,我们发现file2txt真的写错了,需要返回到git add之前的状态。输入:git reset -q file2txt这个时候,file2txt就回到了解放前了。
用git status查看一下,file2txt是”change not staged for mit”状态。3,回到没有做过的情况我们最终确定,最后一次修改的file2txt是无用的代码,我们需要废弃掉。
注意,这个 *** 作不能恢复的哦。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,得到当前最新代码最后。
我们把file1txt和file2txt都删掉。我们需要从版本库中取得当前最新的代码。
很简单:git checkout master如果是要banana分支的最新代码,则:git checkout banana以上的 *** 作,我们知道了如何查看版本分支,和如何回复到以前的版本。
4 git gui怎么在本地建版本库git怎么创建本地版本仓库安装git我就不用说了吧!下载地址:/msysgit/msysgit/releases/download/Git-194-preview20140815/Git-194-preview20140815exe 安装完后 点击桌面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++言归正传,现在我们编写一个testtxt文件,内容如下:Git is a version control systemGit is free software一定要放到testcms目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令git add告诉Git,把文件添加到仓库:$ git add testtxt执行上面的命令,没有任何显示,这就对了,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 testtxt简单解释一下git mit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
git mit命令执行成功后会告诉你,1个文件被改动(我们新添加的testtxt文件),插入了两行内容(testtxt有两行内容)。为什么Git添加文件需要add,mit一共两步呢?因为mit可以一次提交很多文件,所以你可以多次add不同的文件,比如:$ git add test1txt$ git add test2txt$ git add test3txt$ 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撤销修改
41增补修改(只能用于针对最后一个提交)
git mit -C HEAD -a --amend
42反转提交
创建一个新的反向的提交来抵消原来的提交
git revert -n HEAD 反转当前版本库最新的提交并且缓存起来。但是不提交
43复位
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撤销修改41增补修改(只能用于针对最后一个提交)git mit -C HEAD -a --amend42反转提交创建一个新的反向的提交来抵消原来的提交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
注意事项
以上就是关于gitdiff指定head和上一个head的差异全部的内容,包括:gitdiff指定head和上一个head的差异、git、sourcetree commit 到HEAD分支提交代码切换分支出现问题。、git查看历史版本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)