-
git如何查看缓存区文件内容_git 命令 git diff 查看 Git 区域文件的具体改动
2020-12-19 21:56:16查看 Git 区域文件的具体改动 git diffgit status 只能让我们知道文件在 Git 区域内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同 Git 区域中的差异),此时需要用 git diff 命令。...查看 Git 区域文件的具体改动 git diff
git status 只能让我们知道文件在 Git 区域内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同 Git 区域中的差异),此时需要用 git diff 命令。
对于 b 文件,由于是新增的文件,其只存在于工作区,且处于 Untracked 状态,Git 认为无论是哪两个 Git 区域之间的比对都没有意义,得到的结果是没有区别。
而对于 a文件,由于已经被提交到仓库了,处于 Git 管理中,所以这个文件同时存在于三个 Git 空间(工作区,暂存区,仓库),我们在工作区内对其进行了文件改动,无论是比对工作区 vs 暂存区或者工作区 vs 仓库,得到的结果应该都是 a 文件里的具体变化内容。而如果比对暂存区 vs 仓库,得到的结果也应该是没有区别。
git diff 用在查看文件内容变化
查看文件当前变动(工作区 vs 暂存区)git diff
工作区做了改动
//改动 a.txt 文件后可看到文件的具体变化
[root@ci-node1 git_test]# echo "test">>a
看看git stauts,文件被修改了,这个文件被git仓库管理
[root@ci-node1 git_test]# git status
On branch master
Changes not stagedforcommit:
(use"git add ..."to update what will be committed)
(use"git checkout -- ..." to discard changes inworking directory)
modified: a
no changes added to commit (use"git add" and/or "git commit -a")
看看文件里面改了什么 git status无法看到,使用git diff
对比工作区和暂存区
[root@ci-node1 git_test]# git diffadiff --git a/a b/a
index e69de29..9daeafb100644
--- a/a+++ b/a
@@-0,0 +1@@+test
暂存区和工作区的a做了哪些改动,加了test
//将 a 文件的变动暂存后,查看变化
[root@ci-node1 git_test]# git add a
[root@ci-node1 git_test]# git status
On branch master
Changes to be committed:
(use"git reset HEAD ..."to unstage)
modified: a//对比工作区与暂存区,无变化,git diff 没有输出
[root@ci-node1 git_test]# git diffa//git add 后工作区和暂存区内容一致了,对比,
查看文件当前变动(工作区 vs 暂存区)git diff –cached
这时候对比暂存区与本地仓库,可以看到具体变化
//对比暂存区与本地仓库,可以看到具体变化
[root@ci-node1 git_test]# git diff --cached adiff --git a/a b/a
index e69de29..9daeafb100644
--- a/a+++ b/a
@@-0,0 +1@@+test
这时候执行git commit
[root@ci-node1 git_test]# git commit -m "modify a"[master af5856a] modify a1 file changed, 1 insertion(+)//这时候再执行git diff --cached ,没有输出
[root@ci-node1 git_test]# git diff --cached a
暂存区和本地仓库一样了
再做个验证
//工作区是干净的,三个区域 工作区、暂存区、本地仓库内容是一致的
[root@ci-node1 git_test]# git status
On branch master
nothing to commit, working tree clean
改动 a 文件后,工作区改动了,再看变化
//改动 a 文件后,工作区改动了,再看变化
[root@ci-node1 git_test]# echo "bbb">a
现在工作区和暂存区不一致的,但暂存区和本地仓库是一致的
//现在工作区和暂存区不一致的,但暂存区和本地仓库是一致的
[root@ci-node1 git_test]# git diffadiff --git a/a b/a
index 9daeafb..f761ec1100644
--- a/a+++ b/a
@@-1 +1@@-test+bbb
没有输出,因为暂存区和本地仓库是一致的
//没有输出,因为暂存区和本地仓库是一致的
[root@ci-node1 git_test]# git diff --cached a
总结:
git diff 比较的是 工作区和暂存区
git diff --cached 比较的是 暂存区和本地仓库
-
Git 基础命令
2019-12-17 18:06:02git clone (url) 把github上的项目克隆下来 git add (文件名) 文件提交暂存区 ...查看当前状态,有哪些已经修改还没提交什么的 git pull/push 更新/上传项目到clong的地方,需要登陆 ... -
Git 版本控制系统
2016-03-29 10:24:21简单说,就是当你出错了,可以很容易地回到没出错时的状态。你可能已经在不知不觉中,布置了自己的版本控制系统。比如,创建了类似下面这样的文件名: 论文_0510.doc 论文_0514.doc 论文_0521.doc 论文_修改版.doc ...版本控制系统
版本控制
版本控制(Version Control)的作用是追踪文件的变化。为什么需要版本控制?简单说,就是当你出错了,可以很容易地回到没出错时的状态。
你可能已经在不知不觉中,布置了自己的版本控制系统。比如,创建了类似下面这样的文件名:
- 论文_0510.doc
- 论文_0514.doc
- 论文_0521.doc
- 论文_修改版.doc
- 论文_最终不修改版.doc
这就是软件中为什么有”Save As”命令的原因。它使得你可以在不破坏源文件的基础上,得到一个类似的新文件。文件的多版本保存是一个常见问题,通常的解决办法是这样的:
- 做一个文件备份(比如Document.old.txt)。
- 在文件名中加入版本号或日期(比如Document_V1.txt,DocumentMarch2007.txt)。
- 在多人编辑的环境下,共享一个文件目录,并且要求每个人编辑完以后,在文件上做出标识。
什么是版本控制系统(VCS)?
大型的、频繁修改的、多人编写的软件项目,需要一个版本控制系统(简称VCS,行话叫做”文件数据库”),追踪文件的变化,避免出现混乱。
一次典型的使用过程是这样的:
爱丽丝add一个文件(list.txt)进入repo。然后,她又把这个文件check out,做了一次编辑(在文件中加入milk这个单词)。接着,她将修改后的文件check in,并附有一条checking message(”加入了新的条目”)。第二天早上,鲍勃update了他本地的working set,看到了list.txt的最新修订版,其中包含了单词”milk”。如果他使用changelog或diff,都可以发现前一天爱丽丝加入”milk”这个词。
网上有许多VCS软件可供选择,并且都有详细的教程或手册,比如SVN、CVS、RCS、Git、Perforce等等。
版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被版本控制系统管理起来,每个文件的修改、删除,都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
Git
安装Git
直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行命令
xcode-select --install
安装“Command Line Tools”,点“Install”就可以完成安装了。创建版本库
选择一个合适的地方,创建一个空目录:
$ mkdir learngit $ cd learngit
通过
git init
命令把这个目录变成Git可以管理的仓库:$ git init Initialized empty Git repository in /Users/Chaosky/Desktop/learngit/.git/
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
把文件添加到版本库
编写一个README.md文件,内容如下:
Git is a version control system. Git is free software.
一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
用命令
git add
告诉Git,把文件添加到仓库:$ git add readme.txt
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
用命令
git commit
告诉Git,把文件提交到仓库:$ git commit -m "wrote a readme file" [master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
工作区和暂存区
工作区(Working Directory)
就是你在电脑里能看到的目录。
版本库(Repository)
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区;第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
版本库管理
git status
查看仓库当前的状态,要随时掌握工作区的状态,使用git status命令。
git diff
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
git log
显示从最近到最远的提交日志。在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset –hard commit_id
在版本的历史之间进行切换,
commit_id
为提交版本的id。git reflog
用来记录你的每一次命令
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- README.md
。场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD README.md
,就回到了场景1,第二步按场景1操作。git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
远程仓库
分布式版本控制系统通常也有一台充当“中央服务器”的电脑,而充当”中央服务器”角色的仓库就是远程仓库,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
如果有自己的私有仓库地址,则无需执行下面几个操作。
注册远程仓库账号
- Git@OSC:开源中国Git托管平台
- Github:世界最大的Git项目托管平台
- Coding:国内新兴的Git托管平台
服务器左下角有上传远程服务器需要的代码
添加公钥到Git托管平台
生成公钥
SSH Keys:SSH key 可以让你在你的电脑和 Git托管平台之间建立安全的加密连接。
你可以按如下命令来生成sshkey:
$ ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
其中
xxxxx@xxxxx.com
需要填写邮箱信息生成SSH key时,如果不清楚需要输入的信息,可以全部输入Enter键。
查看你的public key,并把他添加到Git托管平台
$ cat ~/.ssh/id_rsa.pub
具体添加的位置,查看具体的托管平台。一般来说,在个人资料中可以找到
SSH-KEYS
类似的字样就是添加公钥的地方。测试是否添加成功
测试Git@OSC输入命令:
$ ssh -T git@git.oschina.net Welcome to Git@OSC, yourname!
测试Github输入命令:
$ ssh -T git@github.com Hi chaoskyme! Youve successfully authenticated, but GitHub does not provide shell access.
生成SSH key只需要生成一次,不同的网站再将公钥拷贝到网站上即可。
在Git托管平台上创建项目
添加远程仓库
关联一个远程仓库命令:
$ git remote add origin git@server-name:path/repo-name.git
其中
origin
表示远程仓库的别名,默认为origin
git@server-name:path/repo-name.git
表示项目在Git托管平台上的ssh 地址。关联远程仓库只需要执行上面的命令一次即可。
关联后,第一次推送master分支的所有内容命令:
$ git push -u origin master
此后,每次本地提交后,只要有必要,推送最新修改就可以使用命令:
$ git push origin master
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
克隆远程仓库
$ git clone git@server-name:path/repo-name.git <repo-name>
从远程分支获取最新版本到本地,有2个命令
- git fetch:相当于是从远程获取最新版本到本地,不会自动merge
$ git fetch origin master $ git log -p master..origin/master $ git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上;
然后比较本地的master分支和origin/master分支的差别;
最后进行合并。
- git pull:相当于是从远程获取最新版本并merge到本地
$ git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
分支管理
Git鼓励大量使用分支:
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name>
删除分支:
git branch -d <name>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用
git log --graph
命令可以看到分支合并图。推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
标签管理
git tag <name>
用于新建一个标签,默认为HEAD,也可以指定一个commit id;git tag -a <tagname> -m "blablabla..."
可以指定标签信息;git tag -s <tagname> -m "blablabla..."
可以用PGP签名标签;git tag
可以查看所有标签git push origin <tagname>
可以推送一个本地标签;git push origin —tags
可以推送全部未推送过的本地标签;git tag -d <tagname>
可以删除一个本地标签;git push origin :refs/tags/<tagname>
可以删除一个远程标签。Git常用命令速查表
参考文章
- http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- 参考书籍:《Git权威指南》
- http://backlogtool.com/git-guide/cn/
关于 git管理我们的版本 总的来说 特点是:git非常灵活 易于管理 但是操作上要复杂一点
在学习git指令时可能比较复杂 可以去看上面廖旭峰的博客 它讲得很清楚
关于git 管理还有一款软件要推荐 SourceTree
用他可以很方便管理我们的版本 其中涉及到 克隆服务器上的项目 从URL克隆
克隆别的服务器上的项目 需要fork到自己的服务器 可以把服务器上的项目下载下来进行修改 然后通过 添加暂存 提交 以及推送 发送给自己的在线服务器 如果是发给别的服务器 需要用到一个pull request指令 -
为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较? fastjson到底做错了什么?为什么会被频繁爆出漏洞? 大厂是如何设计接口的? 不要再在对外接口中使用枚举类型了! 科普 你知道程序是怎么处理时区...
-
导致后期改项目为组件化的时候十分痛苦,不同模块之间的业务逻辑实在关联太多,但还是没办法,于是按照步骤一步步实践。终极目标是,告别结构臃肿,让各个业务变得相对独立,业务组件在组件模式下可以独立开发。 ...
-
为什么有时候会发现消息发送到了队列中,但是不被消费? A: 一种可能的原因是。 你的电脑上在Debug一个程序jseckill-backend, 另外在你自己的服务器上也运行了同样的程序。 两个程序如果连接的是同一个RabbitMQ,就...
-
也可以在布局文件中指定BottomBarLayout的smoothScroll属性为true 开启后效果如下: 设置条目选中的监听 mBottomBarLayout.setOnItemSelectedListener(new BottomBarLayout.OnItemSelectedListener() { @Override...
-
Apache Hive: 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析 笔记 Hive篇 ...
-
##5、在表单中使用非常简单,与常规的form字段没什么差别,如下: class TestUeditorModelForm(forms.ModelForm): class Meta: model=Blog *********************************** 如果不是用ModelForm,可以有两种...
-
点文件:使点文件再次变大-源码
2021-02-04 05:12:13为什么? 符号链接可保持主目录的清洁 简单的命令可以使应用程序和工具保持最新状态 单一位置进行配置 即时设置 复制环境 数据丢失? 没问题 安装 git clone https://github.com/nijikokun/dotfiles.git ~ /.... -
region_layer层前向函数forward_region_layer()在求l.output过程中(也就是第一次使用activate_array函数),为什么只对x,y进行了logistic激活函数处理,而没有对w,h处理(也就是activate_array()函数的第二个参数为...
-
第1、2、3位没什么好说的保持不变; 第4位插孔侦测,耳机设备属于外接设备,所以应当是0,这里是0不用动; 第5位装置类型笔记本忽略; 第6位连接类型,插口为圆口,所以是1,这里是1,保持不变; 第7位代表是否有...
-
默认使用的高度是设备的可用高度,也就是不包括状态栏和底部的操作栏的,如果你希望拿设备的物理高度进行百分比化: 可以在Application的onCreate方法中进行设置: public class UseDeviceSizeApplication extends ...
-
网页关了刷新了、程序崩溃了、手机没电了,重新打开连接,都可以继续。 Redux 状态预览(Redux DevTools extension) Redux设计管理了所有应存的状态,这是上面持久化的保证。 游戏框架使用的是 React + Redux,...
-
COLA :根据我的了解来看,很多公司的项目都是基于 COLA 进行开发的,相比于其他快速开发脚手架,COLA 并不提供什么已经开发好的功能,它提供的主要是一个干净的架构,然后你可以在此基础上进行开发。通过一行命令就...
-
3.1.0 在函数内定义一个字符数组,用gets函数输入字符串的时候,如果输入越界,为什么程序会崩溃? 3.1.1 C++中引用与指针的区别 3.1.2 C/C++程序的内存分区 3.1.3 快速排序的思想、时间复杂度、实现以及优化方法...
-
有些动图,在做成电子书(比如 pdf)的时候自然就变没了,如果需要看动图的, 可以去我的公众号《力扣加加》或者我的 leetcode 题解仓库看。 epub 还是有动图的 另外有些内容只在公众号发布,因此大家觉得内容...
-
1.在版权中心的官网中,我的登记那一栏状态显示补正通知书,但是为什么我邮箱没有收到补正通知书? 造成问题的原因: 您在申请表中留的邮箱号码不对 您预留的邮箱不是qq邮箱、163邮箱等常见邮箱(本人曾经就是...
-
设备管理 界面里可以检查设备是否正常init,起停atx-agent,抓取atx-agent.log文件 测试脚本调出脚本助手,实时界面同步,点击界面直接插入各种代码,同时支持uiautomator和Appium 视频教程 请戳这里 其他文档在此...
-
因为HttpAsyncClient相对于HttpClient,就多了一个NIO,这也是为什么支持异步的原因。 不过我有一个疑问,虽说NIO是同步非阻塞IO,但是HttpAsyncClient提供了回调的机制, 这点儿跟netty很像,所以可以模拟... ...
-
我在这个issue里写明了为什么 oc的图形化os选择页面无用的理由也同上 因为你不用oc去引导windows并且直接省略选择页面,所以图形化的oc界面也就没用 一定要先改三码再用,具体的教程自己百度 icloud中的查找我的...
-
面试官:为什么-Android-要采用-Binder-作为-IPC-机制? 面试腾讯Android研发岗,已拿到-offer,我是如何准备-Android-技术面 面试被问HTTP感觉吃力,错过offer,本文帮你树立完整HTTP知识体系! 面试被问Retrofit,...
-
6.增加了状态同步的demo,基本上就是一个简单的mmo demo,十分方便入门学习 7.增加了repl功能,可以在server进程的console中输入代码及时执行,调试服务器非常方便 ...... ET 4.0发布! 4.0将是一个长期支持版本,...
-
SpringAOP,死锁,JUC同步锁,读-写同步锁,ThreadLocal使用,JUC线程池和Spring提供的线程池,jdk 1.8 中的日期时间API,数据结构中 图的实现及操作和广度优先遍历/深度优先遍历(其他待完善),生成XML文件工具类,...
-
深入理解 webpack 文件打包机制
2020-11-22 18:44:04你可能会好奇为什么要这么做? 因为这样可以给 vendor 生成稳定的 hash 值,每次修改业务代码(pageA),这段初始化时代码就会发生变化,那么如果将这段初始化代码放在 vendor 文件中的话... -
Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传...
-
第三方规则集与策略组管理,保存后config文件中出现^M换行符,导致Clash启动失败
2021-01-06 03:50:44感觉调试日志也没什么帮助,但还是帖一下。 <pre><code> OpenClash 调试日志 生成时间: 2020-08-30 00:55:54 插件版本: v0.39.8-beta #=============&... -
Vue 项目架构设计与工程化实践
2021-01-08 14:30:50<p><strong>为什么 event-bus 很容易出问题?好像它就是一个普通的事件机制而已,为什么那么危险?</strong></p> 这是个好问题,我说一下我曾经遇到的一个问题。先描述一个很简单的业务场景... -
webpack 持久化缓存实践
2020-12-05 02:31:10为什么做持久化缓存?</li><li>webpack 如何做持久化缓存?</li><li>webpack 做缓存的一些注意点。</li></ol> 持久化缓存 首先我们需要去解释一下,什么是持久化缓存,在现在前后端分离的应用大行... -