git安装
linux上的安装
[cpp] view plaincopy
yum install git
windows上的安装
http://git-scm.com/download/win
下载安装即可。
安装完成后,还需要最后一步设置,在命令行输入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
因为git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。然后在本机会生成一个.gitconfig文件,里面包含了user.name和user.email的信息。
WINDOWS下需要再添加一个配置,如下:
git config --global core.autocrlf false
如果没有加这个配置,在后续git操作的时候可能会报warning,如下:
这是因为在windows中的换行符为CRLF(\r\n), 而在linux下的换行符为:LF(\n)。
使用git来生成一个工程后,文件中的换行符为LF,在windows中,执行git add file操作时,系统提示:LF将被转换成CRLF。
CRLF -- Carriage-Return Line-Feed 回车换行,就是回车(CR,ASCII 13,\r) 换行(LF,ASCII 10,\n)。
git命令
git目录最好都不要包含中文名。
单机操作命令/单仓库命令
创建版本库repository
mkdir git_repo
cd git_repo
git init
会在目录中生成.git文件夹,该文件夹就是git仓库的管理文件,不要随意改动里面的内容。该文件夹默认是隐藏,ls命令看不到,用ls -ah命令可以看到。
新建一个file1.txt文件,文件内容如下(随意写的):
This is file1.txt.
for test~~~
把文件添加到代码库
git add file1 file2...
git commit -m "comment"
git add是把想要提交的文件先提交到commit缓存中;
git commit才是真正的文件提交。
通过git add命令,就等于是把文件加入到git管理中,会有各种git信息跟踪,比如代码版本号,修改了哪里等等。
查看代码仓库状态
git status
假设我修改了file1.txt文件内容如下:
hello everybody!
This is an file1.txt.
end file.
然后用git status命令看一下:
上面的提示告诉我们file1.txt被修改过了,但是还没有add到commit缓存中,即还没有准备提交(commit)。
查看修改内容
虽然git status告诉我们file1.txt被修改了,但是没告诉我们哪里被修改,为了具体查看文件什么地方被修改,就使用如下命令:
git diff file
git diff命令要在git add命令之前使用,否则一旦添加到commit缓存后,git diff命令就失效了。
通过git add后,再看git status状态,就变成了准备提交(commit)的状态了。
随后再git commit一下,就提交成功。
commit后,我们再看看git status,如下:
上图黄色框中说明当前目录多了个less文件是没有被git跟踪管理的,这个是我不小心加入的文件,在此无用,可以删去。如果是你需要的文件,那么就通过git add把它加入git管理。
删去了less文件后,看git status,如下所示:
查看两个版本之间的不同
git diff 版本1 版本2 [文件]
文件是可选的参数,不带[文件]参数的是比较所有的不同修改:
带[文件]参数的,你可以只查看某个文件的不同:
查看commit历史
git log
查看命令历史
git reflog
版本回退
git reset --hard HEAD^
git reset --hard HEAD@{4}
先用git log或者git reflog看下历史版本,然后用git reset 命令回退版本,如下:
git是用HEAD来表示当前分支中的当前版本,HEAD^表示上一个版本,HEAD^^表示上上一个版本,以此类推,如果要回退很早的版本就用HEAD@{版本号},版本号用git reflog查看。
撤销修改
分3种情况
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file 或者 手动修改。
场景2:当你不但改乱了工作区某个文件的内容,并且还添加到了暂存区(即已经git add了)时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以用版本回退(参考版本回退一节),不过前提是没有推送到远程库。
下面举例说明:
场景1
如果文件还是在工作区中,还没有git add到暂存区,那么撤销修改有2种办法:,如下:
第1种办法:手动复原,把不想要的修改地方复原。(该方法可以只修改文件的一部分)
第2种办法:使用命令git checkout -- file。(这里的 -- 很重要,后续的版本分支也是是用git checkout命令,它没有 --)
(该方法只能全部复原文件,因为git checkout -- file其实就是把版本库中的file替换现在工作区的file)
场景2
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步骤。
第1步:用命令git reset HEAD file,就回到了场景1;
第2步:按场景1操作。
git reset HEAD file命令是把缓存区中的file文件删去,对工作区后续做的修改并没有影响,比如上面的例子,git add后又修改了文件的内容everybody->chenj_freedom,git reset HEAD file后,file的内容还是chenj_freedom。
场景3
已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件/误删除还原
从版本库中删除文件
git rm file 或者 git add file
git commit
误删除复原
git checkout -- file
git checkout -- file其实就是用版本库中的file文件替换工作区的文件,所以无论工作区的file文件是被修改了还是被删除了,用这个命令都可以一键还原。