一些认识
之前对github和git一直傻傻分不清,以为是两种不同的版本管理工具。现在才认识到git是一种版本管理工具,而github只是一个远程仓库。实际上没有github这种远程仓库,你计算机中git也会建立一个本地的仓库,或者链接到其他的远程仓库。
1. git的安装
输入命令安装git,并查看版本以确认安装成功。
sudo apt-get install git
git --version
2. git的使用
先解释一些概念,git分四层管理代码。
- 你目录中的文件是第一层
- 缓存区,每次add之后,当前目录中要追踪的文件会作为一个版本会存放在缓存区。注意不是所有的文件。一般一个文件生成之后,会标记为“未追踪”,但是否对其做版本管理还是要选择的。例如一些编译文件就没有必要追踪。对需要做版本管理的问件,用add添加,不需要的用clean删除。
- 本地仓库,每次commit之后,缓存区最新的版本就会存放在本地仓库。这里要提及一个HEAD的概念。HEAD是当前的版本指向,每次更新或者回退都会修改HEAD的指向,但对仓库中每一个版本并不会删除。所以即使回退到过去还是有机会回到现在的版本的。
- 远程仓库,每次push之后,会将本地仓库中HEAD所指向的版本存放到远程仓库
这里附上一些我常用的命令作为备忘录,详细的使用效果请参考我文末附上的博客链接。
命令 | 功能 |
---|---|
git init | 在本地的当前目录里初始化git仓库 |
git status | 查看当前仓库的状态 |
git add -A | 增加目录中所有的文件到缓存区 |
git add file | 增加相应文件到缓存区 |
git commit -m "信息" | 将缓存区中更改提交到本地仓库 |
git log | 查看当前版本之前的提交记录 |
git reflog | 查看HEAD的变更记录,包括回退 |
git branch -b branch_name | 建立一个新的分支 |
git diff | 查看当前文件与缓存区文件的差异 |
git checkout -- file | 取消更改,将缓存区的文件提取覆盖当前文件 |
git reset --hard 版本号 | 回退到相应版本号,同样也可以回退到未来的版本号 |
git clean -xf | 删除当前目录中所有未追踪的文件 |
git config --global core.quotepath false | 处理中文文件名 |
这些命令用于处理本地仓库的版本管理足够了,下面我介绍与远程仓库打交道。
-
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。参数--pretty=oneline
-
要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。 -
一、初始化
1、首先安装git软件,安装环境是centos 7.x下的云服务器。使用命令:
#yum install git
2、设置用户名和邮箱(必须):
# git config --global user.name "Your Name" # git config --global user.email "email@example.com"
3、创建一个版本库,选择一个合适的地方,创建一个空目录:
# mkdir learngit #在服务器中创建learngit文件夹 # cd learngit #进入learngit 文件夹 # pwd #显示当前工作路径
结果:(使用root用户权限)
/root/learngit
4、初始化这个目录为git可以管理的仓库,使用命令:
# git init Initialized empty Git repository in /root/learngit/.git/
已经成功初始化git仓库,并且是空的,路径在/root/learngit/,这个目录就是git可以管理的仓库。
5、把文件添加到git仓库
#vi read.txt #创建一个文本文件 # i "hello ,world" # 编辑文件内容 # :x #保存并退出
第一步 使用命令
git add
告诉git,把文件添加到仓库:# git add read.txt
第二步 用命令
git commit
告诉git,把文件提交到仓库:# git commit -m "wrote a read file"
说明:
git commit
命令,-m
后面是本次提交的说明,是对提交更改的内容的说明,方便以后很快的查找版本更新的内容。git commit
命令执行成功后,会告诉你,1个文件被改动,插入了1行内容(read.txt有1行内容)。为什么Git添加文件需要
add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:# git add file1.txt # git add file2.txt file3.txt # git commit -m "add 3 files."
二、更新文件内容
1、继续更新文件内容
#vi read.txt #hello world #第二行添加hello ,world #:x
2、查看文件现在状态
#git status
可以看到,文件已经修改,但是还没有提交。
3、查看更改的内容,使用命令:
#git diff read.txt
可以看见更改的内容,增加了一行内容。
4、再次提交版本
#git add read.txt
此时的状态 :git status
提交:
#git commit -m "add hello world"
-
开发中常用操作
删除文件:git rm 文件名[删除本地git仓库文件, 提交后远程服务器上的文件才会消失]
查看状态:git status
添加记录:git add 文件名 或 git add . [将文件提交到远程git服务器上]
添加描述:git commit -m "描述或备注类似svn提交时的注释"
同步数据:git pull [获取git远程服务器上的数据也可以具体到某一分支如: git pull origin 分支名]
提交数据:git push origin 分支名
分支操作
查看分支:git branch
创建分支:git branch 分支名
切换分支:git checkout 分支名
创建+切换分支:git checkout -b 分支名
合并某分支到当前分支:git merge 分支名
[比如,如果要将开发中的分支(deve),合并到稳定分支(master),
首先切换的master分支:git checkout master。
然后执行合并操作:git merge deve。
如果有冲突,会提示你,调用git status查看冲突文件。
解决冲突,然后调用git add或git rm将解决后的文件暂存。
所有冲突解决后,git commit 提交更改。]注意点:
分支衍合
分支衍合和分支合并的差别在于,分支衍合不会保留合并的日志,不留痕迹,而 分支合并则会保留合并的日志。
要将开发中的分支(dev),衍合到稳定分支(master)。
首先切换的master分支:git checkout master。
然后执行衍和操作:git rebase deve
如果有冲突,会提示你,调用git status查看冲突文件。
解决冲突,然后调用git add或git rm将解决后的文件暂存。
所有冲突解决后,git rebase --continue 提交更改。删除分支:git branch -d 分支名
删除分支执行git branch -d 分支名
如果该分支没有合并到主分支会报错,可以用以下命令强制删除git branch -D 分支名删除远程分支:git push origin :name
撤销修改:git checkout -- file