guying 2020-06-08
Git是一个分布式的版本控制软件 相当于QQ,office等需要安装到电脑上才可以使用的工具 版本控制:类似于毕业论文,写文案等,需要反复修改和保留历史的数据
要保留之前的数据,方便回滚和修改
https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
#安装Git yum install git -y #配置git使用用户 git config --global user.name "yfc" #配置git使用邮箱 git config --global user.email "" #语法高亮显示 git config --global color.ui true #查看有哪些用户 git config --list #查看设置的用户 cat .gitconfig
mkdir /data cd /data git init
[ data]# ll .git total 12 drwxr-xr-x 2 root root 6 Mar 23 21:14 branches #分支目录 -rw-r--r-- 1 root root 92 Mar 23 21:14 config #定义项目特有的配置选项 -rw-r--r-- 1 root root 73 Mar 23 21:14 description #仅供git web程序使用 -rw-r--r-- 1 root root 23 Mar 23 21:14 HEAD #指示当前的分支 drwxr-xr-x 2 root root 242 Mar 23 21:14 hooks #包含git钩子文件 drwxr-xr-x 2 root root 21 Mar 23 21:14 info #包含一个全局排除文件(exclude文件) drwxr-xr-x 4 root root 30 Mar 23 21:14 objects #存放所有数据内容,有info和pack两个子文件夹 drwxr-xr-x 4 root root 31 Mar 23 21:14 refs #存放指向数据(分支)的提交对象的指针
cd /data touch file{1,2,3}
git add .
git commit -m "新增3个文件"
git status
git mv file1 file4 git commit -m "修改file1为file4"
1. 此时git的三个区域都有file2文件,往file2文件写入内容 echo 123 > file2 2. 进行文件比对 git diff file2
1. 把工作区的文件提交到暂存区 [ data]# git add . 2. 进行文件比对 git diff --cached file2 3. 提交后在比对则暂存区和本地仓库(内容相同) git commit -m "file2" git diff --cached file2
相当于虚拟机的镜像、任何操作都被做了一次快照,可恢复到任意一个位置
[ data]# git log commit 97f0c9afe1af1fb7251ed93f5283475fb7ca9620 Author: yfc <> Date: Mon Mar 23 22:15:24 2020 +0800 file2 commit b236e2fe006fc8d7428da6fa920ab2a40c2985da Author: yfc <> Date: Mon Mar 23 21:54:43 2020 +0800 修改file1为file4 commit 89f5a806cf57c10ebc97c7ed70078ec174695f4f Author: yfc <> Date: Mon Mar 23 21:30:13 2020 +0800 新增3个文件
git log --oneline #就是把上面的信息,以一行显示出来且把每次对应的hash值,取前7位!结果如下 [ data]# git log --oneline 0a819ad file2 28bc994 修改file1为file4 65154df 新增3个文件
[ data]# cat file2 123 [ data]# >file2
思路
用暂存区的目录覆盖本地目录
命令如下
[ data]# git checkout file2 [ data]# cat file2 123
[ data]# cat file2 123 [ data]# >file2 [ data]# git add .
思路
先用本地仓库的目录覆盖暂存区的,在用暂存区的覆盖本地目录
命令如下
1. 先覆盖暂存区 [ data]# git reset HEAD file2 2. 再覆盖本地目录 [ data]# git checkout -- file2 3. 检查file2文件 [ data]# cat file2 123
[ data]# echo yfc >> file2 [ data]# cat file2 123 yfc [ data]# git add . [ data]# git commit -m "file2文件新增内容yfc" [ data]# echo yfc.com >> file2 [ data]# cat file2 123 yfc yfc.com [ data]# git add . [ data]# git commit -m "file2文件新增内容yfc.com"
需求1:回退到file2文件最初始的状态
[ data]# git log --oneline 61f27d6 file2文件新增yfc.com 79da77b file2文件新增yfc 97f0c9a file2 b236e2f 修改file1为file4 89f5a80 新增file1-3 [ data]# git reset --hard 97f0c9a [ data]# cat file2 123
需求2:回退到file2文件中有yfc内容时的状态
[ data]# git reflog 97f0c9a {0}: reset: moving to 97f0c9a 61f27d6 {1}: commit: file2文件新增yfc.com 79da77b {2}: commit: file2文件新增yfc 97f0c9a {3}: commit: file2 b236e2f {4}: commit: 修改file1为file4 89f5a80 {5}: commit (initial): 新增file1-3 [ data]# git reset --hard 79da77b HEAD is now at 79da77b file2文件新增yfc [ data]# cat file2 123 yfc
分支可以给使用者提供与主干隔离的环境,以免影响到主干,在分支上开发完新功能测试好以后,可以合并到主干,这样即不影响主干也不会耽误开发的进度
git branch
git branch 分支名称 #例如 git branch dev
git checkout dev
git branch -d 分支名称 #例如 git branch -d dev 注意:删除分支一定要在主干上去删除分支
git branch dev touch file{6,7} git add . git commit -m "新增文件file5和file6"
git checkout master touch file{9,10} git add . git commit -m "新增文件file9和file10"
#因为此时可能有别的人员提交了代码到master上,所以我们要先把自己master上的内容合并到master上 记得切换分支在合并 例如,想要把master的内容合并到dev上,要先切换到dev上,在合并 git checkout dev git megre master -m "dev合并master内容"
[ data]# git branch * dev master [ data]# git checkout master Switched to branch ‘master‘ [ data]# ls file2 file3 file4 file7 file8 [ data]# git merge dev Updating 697395f..15cde5e Fast-forward file5 | 0 file6 | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 file5 create mode 100644 file6 [ data]# ls file2 file3 file4 file5 file6 file7 file8 #可以看到现在master有全部的文件了
[ data]# git branch dev [ data]# git branch dev * master [ data]# ls file2 file3 file4 file5 file6 file7 file8 [ data]# cat file2 123 yfc [ data]# echo 111 >> file2 [ data]# git add . [ data]# git commit -m "修改file2文件" [ data]# git checkout dev [ data]# echo 111 >> file2 [ data]# git add . [ data]# git commit -m "修改file2文件"
[ data]# git checkout dev [ data]# git merge master Auto-merging file2 CONFLICT (content): Merge conflict in file2 Automatic merge failed; fix conflicts and then commit the result. [ data]# git merge master error: ‘merge‘ is not possible because you have unmerged files. hint: Fix them up in the work tree, hint: and then use ‘git add/rm <file>‘ as hint: appropriate to mark resolution and make a commit, hint: or use ‘git commit -a‘. fatal: Exiting because of an unresolved conflict. #此时会报错
修改文件 [ data]# cat file2 123 yfc <<<<<<< HEAD 222 ======= 111 >>>>>>> master [ data]# vim file2 123 yfc 222 111 [ data]# git add . [ data]# git commit -m "megre 合并"
[ data]# git checkout master Switched to branch ‘master‘ [ data]# git merge dev Updating 179bd1c..f5bb452 Fast-forward file2 | 1 + 1 file changed, 1 insertion(+)
标签也是指向了一次commit提交,是一个里程碑式的标签,回滚打标签直接加标签号,不需要加唯一字符串不好记
#格式 git tag -a "标签名字" -m "描述信息" [ data]# git tag -a "v1.0" -m "第一版本"
git tag
git show 标签名字 #例如 git show v1.0
git tag -d 标签名字 #例如 git tag -d v2.0
此处步骤略
1. 克隆远程仓库代码 git clone 远程仓库地址 2. 切换分支进行开发 git checkout dev 3. 开发完毕,提交代码 git add . git commit -m ‘xx‘ git push origin dev
1. 切换到 git checkout dev 2. 拉取最新代码 git pull origin dev 3. 进行开发 4. 提交代码 git add . git commit -m ‘xx‘ git push origin dev