1、安装GIT工具
yum install git -y
2、创建版本库
在任意目录下执行git init即可将该目录变为Git可管理的仓库
cd /
mkdir git
cd /git/
git init
/git目录就变为Git可管理的仓库,执行git init命令后目录内会生成一个.git隐藏目录,该目录用于追踪管理版本仓库
3、创建好一个版本库之后,我们需要做一些简单的配置;我们可以使用git config命令来设置,使用git config命令可以是我们不用去编辑配置文件,他会将我们想要配置的信息写入配置文件中
这些变量可以被存储在三个不同的位置:
1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。
2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。
3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。
现在我们设置一下我们的用户名和mail,因为我们每次提交新内容的时候都会记录这些信息
[root@localhost Git]#git config --global user.name "root" [root@localhost Git]#git config --global user.email "root@root.com" [root@localhost Git]# git config -l user.name=root user.email=root@root.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true
4、将一个文件提交到仓库
在我们建立的版本库目录下或子目录下新建一个文件,写入内容
这个时候该文件还没有被放入git仓库,我们需要经过两步,才能将一个文件提交到git仓库
①使用git add <filename>告诉git仓库我们要把这个文件提交的git仓库。
②使用git commit -m将文件提交到git仓库
-m参数用于为本次提交添加描述信息,以便于日后或他人了解本次改动信息
[root@localhost Git]# echo "one two three" >> learn.txt [root@localhost Git]# git add learn.txt [root@localhost Git]# git commit -m "first file" [master (root-commit) 2c2161f] first file Committer: root <root@localhost.localdomain> After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author 1 file changed, 1 insertion(+) create mode 100644 learn.txt
git commit 一次可以提交多个文件,我们可是使用git add添加多个文件使用git commit一次性提交
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files"
5、查看仓库状态
git status命令可以让我们时刻掌握仓库当前的状态。现在我们先修改learngit.txt文件的内容,再使用git status命令
git status
当我们对某文件进行了修改
git status输出会告诉我们,该被修改了,但还没有准备提交修改
使用git add命令准备提交后我们在使用git status命令输出会告诉我们将要提交被修改的文件
在最终提交文件后,git status会告诉我们没有需要提交的修改,而且工作目录是干净的
git status虽然会告诉我们文件被修改,但无法知道具体修改的内容,如果想知道具体修改了那些内容我们可以使用
git diff命令,git diff命令可以让我们清楚的看到有哪些内容被修改
6、版本回退
经过多次修改后,我们已经记不得每个版本是些什么内容了,但git记得
git log
git log --pretty=oneline
git log命令会显示从最近到最远的提交日志,如果嫌输出信息太多可加上--pretty=oneline选项,让每次提交信息显示为一行
包括commit id和每次提交的描述信息。commit id是每个版本的版本号。
要回退到上一个版本,首先我们要知道当前版本,在git中HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^则表示上上个版本,如果想回到10甚至更多版本以前,也可是加^,但是不易读,所以可以写成HEAD~10,当我们知道commit id后,也可以回退到指定的版本。
git reset --hard HEAD^ git reset --hard HEAD^^ git reset --hard HEAD~10 git reset --hard <commit id>
我们还可以使用git reflog查看命令历史。
7、工作区与暂存区
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
8、管理修改
在git中追踪管理的是修改,而不是文件,当我们对某个文件新增了一行,删减了几行,修改了某个标点符号,亦或者新建或是删除了某个文件,都被视作一次修改。
进行一下实验来了解为什么git管理的是修改而不是文件
怎么第二次的修改没有被提交?
我们回顾一下操作过程:
第一次修改 -> git add
-> 第二次修改 -> git commit
我们前面讲了,Git管理的是修改,当你用git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
我们在learengit.txt中新添加一行内容,然后通过git add命令将其添加到暂存区,在使用git status查看一下状态,我们先不着急提交,紧接着对learngit.txt再添加一行后使用git commit提交。此时查看状态会提示我们有未被添加提交的修改。
可以通过git diff HEAD --<filename>比较工作区的文件和版本库最新版本的区别。
9、撤销修改
情况一:工作区做修改,未添加到暂存区,或添加到暂存区后又做了修改:git checkout -- <file>,该操作实际是让这个文件回到最近一次git commit
或git add
时的状态
情况二:修改后添加至暂存区还没提交:git reset HEAD <file>,用命令git reset HEAD <file>可以把暂存区的修改撤销掉,重新放回工作区
情况三:修改并提交,但未推送至远程仓库:git reset --hard HEAD^,将仓库回退一个版本
10、删除文件git rm并git commit提交,此处不需要git add添加
11、储存当前工作环境:git stash
查看储存的公作环境:git stash list
恢复工作环境: ①:恢复不删除储存:git stash apply
②:恢复同时删除储存:git stash pop
删除储存工作环境:git stash drop
12、将其他分支上的某一次提交复制到当前分支:用于多分枝同一bug修复:git cherry-pick commit-id
13、远程仓库
在本地仓库添加一个远程仓库:git remote add origin ssh://用户名@ip/仓库路径/.git
pull取远程仓库某一分支:git pull ssh://用户名@ip/仓库路径/.git <branch>
推分支到远程仓库:git push origin <branch>
克隆远程仓库:git clone ssh://用户名@ip/仓库路径/.git
创建远程origin的dev分支到本地:git checkout -b dev origin/dev
推送分支,就是把该分支上的所有本地提交推送到远程库:git push origin <branch>
获取最新远程仓库内容并和到本地仓库(可能回产生冲突,需要手动修改冲突):git pull
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
多人协作的工作模式通常是这样:
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。