Git是目前世界上最先进的分布式版本控制系统(没有之一)
在RHEL上安装Git
[root@foundation62 ~]# yum install -y git
创建版本库
版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原
[root@foundation62 ~]# mkdir demo
[root@foundation62 demo]# git init #进行初始化,需要在仓库目录中
Initialized empty Git repository in /root/demo/.git/
[root@foundation62 demo]# ls -a
. .. .git
可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了
用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。
每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改
[root@foundation62 demo]# git config --global user.name kobe
[root@foundation62 demo]# git config --global user.email mamba@lakers.org
[root@foundation62 demo]# echo westos > readme.md
用命令git add
告诉Git,把文件添加到仓库
[root@foundation62 demo]# git add readme.md
[root@foundation62 demo]# git status -s
A readme.md
用命令git commit
告诉Git,把文件提交到仓库
git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
[root@foundation62 demo]# git commit -m "add readme.md"
[master (root-commit) 06003f5] add readme.md
1 files changed, 2 insertions(+)
create mode 100644 readme.md
[root@foundation62 ~]# cat .gitconfig
[user]
name = kobe
email = mamba@lakers.org
状态简览
git status
命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s
命令或 git status --short
命令,你将得到一种更为紧凑的格式输出。 运行 git status -s
,状态报告输出如下:
[root@foundation62 demo]# git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
新添加的未跟踪文件前面有 ??
标记,新添加到暂存区中的文件前面有 A
标记,修改过的文件前面有 M
标记。 M
有两个可以出现的位置,出现在右边的 M
表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M
表示该文件被修改了并放入了暂存区
忽略文件
有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式
星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个
c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9]
表示匹配所有 0 到 9 的数字)。 使用两个星号(*) 表示匹配任意中间目录,比如a/**/z
可以匹配 a/z, a/b/z 或
a/b/c/z
等
[root@foundation62 demo]# touch .file1
[root@foundation62 demo]# git status -s
?? .file1
此时编写.gitignore文件
[root@foundation62 .git]# cat .gitignore
.*
[root@foundation62 demo]# git status -s
# 无任何输出
工作区和暂存区
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
撤销修改
在readme.md中多添加了几行内容:
[root@foundation62 demo]# cat readme.md
westos
westos
westos
westos
westos
[root@foundation62 demo]# git checkout -- readme.md
[root@foundation62 demo]# cat readme.md
westos
# 再次查看已经复原
命令git checkout -- readme.md
意思就是,把文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.md
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.md
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
假设在readme.md中写入了内容且git add到暂存区
[root@foundation62 demo]# cat readme.md
westos
Hello World ! ! !
[root@foundation62 demo]# git add readme.md
用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区
[root@foundation62 demo]# git reset HEAD readme.md
Unstaged changes after reset:
M readme.md
# 再执行git checkout -- readme.txt 恢复源文件
已经commit的情况
[root@foundation62 demo]# git add readme.md
[root@foundation62 demo]# git commit -m "add readme.md"
[master ec57fd8] add readme.md
1 file changed, 1 insertion(+)
# 表示返回至上一步
[root@foundation62 demo]# git reset --hard HEAD^
HEAD is now at ce2420d add readme.md
[root@foundation62 demo]# cat readme.md
westos
也可以通过reflog查看
[root@foundation62 demo]# git reflog
ce2420d HEAD@{0}: reset: moving to HEAD^
ec57fd8 HEAD@{1}: commit: add readme.md
ce2420d HEAD@{2}: commit (initial): add readme.md
# 想要返回至哪个状态,就在后面执行 git reset --hard + ID号码
GitHub代码管理
#与github连接并上传
[root@foundation62 demo]# git remote add origin git@github.com:xupt7090/demo.git
[root@foundation62 demo]# git push -u origin master
上传成功
从github上拉取代码
[root@foundation62 demo]# git pull origin