1.体系环境预备
[root@node data]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)[root@node data]# uname -r3.10.0-1127.8.2.el7.x86_64[root@node data]# getenforceDisabled[root@node data]# systemctl stop firewalld2.Gti安装摆设
git config‐‐global 使用全局设置文件 ‐‐system 使用体系级设置文件 ‐‐local 使用版本库级设置文件# 设置git使用用户git config --global user.name "用户名"# 设置git使用邮箱git config --global user.email "用户名@mail.com"# 语法高亮git config --global color.ui true# git信息[root@node data]# git config --listuser.name=用户user.email=XXXXXXX@qq.com[root@git ~]# cat .gitconfig [user] name = 用户名 email = 用户名@qq.com [color] ui = true3.Git初始化
初始化工作目次、对已存在的目次大概对已存在的目次都可举行初始化 mkdir git_data cd git_data/ # 初始化 git init # 检察工作区状态 git status 隐蔽文件先容: branches # 分支目次 config # 界说项目特有的设置选项 description # 仅供git web步调使用 HEAD # 指示当前的分支 hooks # 包含git钩子文件 info # 包含一个全局打扫文件(exclude文件) objects # 存放所有数据内容,有info和pack两个子文件夹 refs # 存放指向数据(分支)的提交对象的指针 index # 保存暂存区信息,在执行git init的时间,这个文件还没有 4.Git常规使用
1) 创建数据-提交数据
2) Git四种状态
3) Git底子下令
git状态
[root@node python-data01]# git status# 位于分支 master # 初始提交 无文件要提交(创建/拷贝文件并使用 "git add" 创建跟踪)创建a b c 文件
[root@node python-data02]# touch a b c[root@node python-data02]# git status# 位于分支 master # # 初始提交 # # 未跟踪的文件: # (使用 "git add <file>..." 以包含要提交的内容) # # a # b # c 提交为空,但是存在尚未跟踪的文件(使用 "git add" 创建跟踪)添加a文件
[root@node python-data02]# git add a[root@node python-data02]# git status# 位于分支 master # # 初始提交 # # 要提交的变动: # (使用 "git rm ‐‐cached <file>..." 撤出暂存区) # # 新文件: a # # 未跟踪的文件: # (使用 "git add <file>..." 以包含要提交的内容) # # b # cgit底层的文件信息
[root@node python-data02]# ll .git/total 52drwxr-xr-x 2 root root 4096 May 12 12:24 branches-rw-r--r-- 1 root root 17 May 14 11:55 COMMIT_EDITMSG-rw-r--r-- 1 root root 229 May 16 17:02 config-rw-r--r-- 1 root root 73 May 12 12:24 description-rw-r--r-- 1 root root 23 May 12 14:29 HEADdrwxr-xr-x 2 root root 4096 May 12 12:24 hooks-rw-r--r-- 1 root root 675 May 16 17:03 index # git add a 把文件提交到了暂存区drwxr-xr-x 2 root root 4096 May 12 12:24 infodrwxr-xr-x 3 root root 4096 May 12 12:24 logsdrwxr-xr-x 78 root root 4096 May 14 11:55 objects-rw-r--r-- 1 root root 41 May 12 12:52 ORIG_HEAD-rw-r--r-- 1 root root 224 May 16 17:01 packed-refsdrwxr-xr-x 5 root root 4096 May 12 12:24 refs使用git add . 大概* 添加目次中所有改动过的文件
[root@node python-data02]# git add . [root@node python-data02]# git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## new file: a# new file: b# new file: c删除Git暂时存放的d文件
[root@node python-data02]# git rm --cached drm 'd'[root@node python-data02]# lltotal 20-rw-r--r-- 1 root root 0 May 16 17:02 a-rw-r--r-- 1 root root 0 May 16 17:02 b-rw-r--r-- 1 root root 0 May 16 17:02 c-rw-r--r-- 1 root root 0 May 16 17:08 d[root@Jenkins python-data02]# git status# 位于分支 master # # 初始提交 # # 要提交的变动: # (使用 "git rm ‐‐cached <file>..." 撤出暂存区) # # 新文件: a # 新文件: b # 新文件: c# 未跟踪的文件: # (使用 "git add <file>..." 以包含要提交的内容) # # d删除文件
1.先从暂存区撤回到工作区、然后直接删除文件 git rm ‐‐cached c rm ‐f c 2.直接从暂存地域同工作地域一同删除文件下令 git rm ‐f b提交到本地仓库
[root@node python-data02]# git commit -m "commit a"[master 5f8ba1f] commit a 4 files changed, 13 insertions(+) create mode 100644 a create mode 100644 b create mode 100644 c create mode 100644 "\357\274\201"[root@node python-data02]# git status# 位于分支 master 无文件要提交,干净的工作区.....修改文件名称两种方法
1) a文件名修改a.txt
[root@node python-data02]# mv a a.txt[root@node python-data02]# git status# 位于分支 master # 尚未暂存以备提交的变动: # (使用 "git add/rm <file>..." 更新要提交的内容) # (使用 "git checkout ‐‐ <file>..." 抛弃工作区的改动) # # 删除: a # # 未跟踪的文件: # (使用 "git add <file>..." 以包含要提交的内容) # # a.txt 修改尚未到场提交(使用 "git add" 和/或 "git commit ‐a")# 从暂存区删除a文件[root@node python-data02]# git rm --cached arm 'a'[root@node python-data02]# git status# 位于分支 master # 要提交的变动: # (使用 "git reset HEAD <file>..." 撤出暂存区) # # 删除: a # # 未跟踪的文件: # (使用 "git add <file>..." 以包含要提交的内容) # # a.txt[root@node python-data02]# git add a.txt[root@node python-data02]# git status[root@git git_data]# git add a.txt [root@git git_data]# git status # 位于分支 master # 要提交的变动: # (使用 "git reset HEAD <file>..." 撤出暂存区) # # 重定名: a ‐> a.txt # 辨认到a和a.txt雷同为重定名 [root@node python-data02]# git commit -m "commit a.txt"[master ddfe7c0] commit a.txt 1 file changed, 0 insertions(+), 0 deletions(-) rename a => a.txt (100%)2) 直接用git下令重定名
# 把工作地域和暂存地域的文件同时修改文件名称[root@node python-data02]# git mv a.txt a[root@node python-data02]# git status# 位于分支 master # 要提交的变动: # (使用 "git reset HEAD <file>..." 撤出暂存区) # # 重定名: a.txt ‐> a [root@node python-data02]# git commit -m "rename a.txt a"[master 3d15f11] rename a.txt a 1 file changed, 0 insertions(+), 0 deletions(-) rename a.txt => a (100%)git status 只能检察地域状态的差别,不能检察文件内容的变化。
git diff 检察内容的差别
[root@node python-data02]# echo aaa > a# 比对本地工作目次和暂存区文件的差别[root@node python-data02]# git diff a diff --git a/a b/aindex e69de29..72943a1 100644--- a/a+++ b/a@@ -0,0 +1 @@+aaa# 提交a文件到暂存地域、在用git diff是雷同的[root@node python-data02]# git add a # 比对的是暂存区和本地仓库文件的差别处[root@node python-data02]# git diff --cached a diff --git a/a b/aindex e69de29..72943a1 100644--- a/a+++ b/a@@ -0,0 +1 @@+aaa# 提交后在比对则暂存区和本地仓库内容雷同[root@node python-data02]# git commit -m "modified a" [master 6361a2e] modified a 1 file changed, 1 insertion(+)[root@node python-data02]# git diff --cached agit commit 相当于假造机的镜像、任何利用都被做了一次快照,可规复到恣意一个位置检察汗青的git commit快照利用
[root@node python-data02]# git logcommit 4c57a605997f511149bfec53d9018b503e77f961 # 哈希唯一标识的字符串 Author: XXXX <XXXX@qq.com> # 作者个人信息 Date: Thu Aug 23 07:54:23 2018 +0800 # 时间 modified a # ‐m 个人写的提交描述信息 # --oneline参数 是能体现 commit信息[root@node python-data02]# git log --oneline 6361a2e modified a3d15f11 rename a.txt addfe7c0 commit a.txt5f8ba1f commit a# --decorate参数 体现当前的指针指向那边[root@node python-data02]# git log --oneline --decorate 6361a2e (HEAD, master) modified a3d15f11 rename a.txt addfe7c0 commit a.txt5f8ba1f commit a# 体现具体内容的变化[root@node python-data02]# git log -p# 只体现1条内容 [root@node python-data02]# git log -1 规复汗青数据
1.只更改当前的目次
[root@node python-data02]# echo "111" >> a1[root@node python-data02]# cat aaaa111[root@node python-data02]# git status# 位于分支 master # 尚未暂存以备提交的变动: # (使用 "git add <file>..." 更新要提交的内容) # (使用 "git checkout ‐‐ <file>..." 抛弃工作区的改动) # 看提示使用此下令覆盖工作区的改动 # # 修改: a # 修改尚未到场提交(使用 "git add" 和/或 "git commit ‐a") # 从暂存区覆盖本地工作目次[root@node python-data02]# git checkout -- a[root@node python-data02]# git status# 位于分支 master 无文件要提交,干净的工作区[root@node python-data02]# cat aaaa2.修改本地的目次,而且同时会提交到暂存区
# 添加新内容[root@node python-data02]# echo "333" >> a # 提交到暂存区 [root@node python-data02]# git add . # 比对暂存区和本地仓库的内容 [root@node python-data02]# git diff --cached diff --git a/a b/aindex 72943a1..a7caab9 100644--- a/a+++ b/a@@ -1 +1,2 @@ aaa+333[root@node python-data02]# git status# 位于分支 master # 要提交的变动: # (使用 "git reset HEAD <file>..." 撤出暂存区) # # 修改: a# 本地仓库覆盖暂存地域[root@node python-data02]# git reset HEAD a 重置后撤出暂存区的变动:M a[root@node python-data02]# git diff adiff --git a/a b/aindex 72943a1..a7caab9 100644--- a/a+++ b/a@@ -1 +1,2 @@ aaa+333[root@node python-data02]# git diff --cached a3.修改了工作目次后提交到了暂存区和本地仓库后举行数据规复
echo bbb >> agit commit -m "add bbb"echo ccc >> a# 这时间发现改错代码了,想还原某一次提交的文件快照git commit -m "add ccc" ......[root@node python-data02]# git log --oneline59ba2a9 add ccc dbead4c add bbb 4c57a60 modified a 5692532 rename a.txt a 7adfca0 commit a.txt b4017a8 commit a Git服务步调中有一个叫做HEAD的版本指针,当用户申请还原数据时,着实就是将HEAD指针指向到某个特定的提交版本,但是由于Git是分布式 版本控制体系,为了制止汗青记载辩说,故使用了SHA‐1盘算出十六进制的哈希字串来区分每个提交版本,别的默认的HEAD版本指针会指向到迩来的一次提交版本记载
[root@node python-data02]# git reset --hard 6361a2eHEAD 现在位于 6361a2e modified a刚刚的利用实际上就是改变了一下HEAD版本指针的位置,就是你将HEAD指针放在那边,那么你的当前工作版本就会定位在那边,要想把内容再还原到最新提交的版本,先看检察下提交版本号
# 打开发现回退错了,应该回退到bbb版本[root@node python-data02]# cat a aaa# 这时间检察log没有commit bbb的汗青了[root@node python-data02]# git log --oneline6361a2e modified a3d15f11 rename a.txt addfe7c0 commit a.txt5f8ba1f commit a为何呢,竟然没有了add bbb这个提交版本记载?
原因很简朴,由于我们当前的工作版本是汗青的一个提交点,这个汗青提交点还没有发生过add bbb 更新记载,以是当然就看不到了,要是想”还原到将来”的汗青更新点,可以用git reflog下令来检察所有的汗青记载
# 使用git reflog 可检察总汗青内容[root@node python-data02]# git reflog4c57a60 HEAD@{0}: reset: moving to 4c57a60 59ba2a9 HEAD@{1}: commit: add ccc dbead4c HEAD@{2}: commit: add bbb 4c57a60 HEAD@{3}: commit: modified a 5692532 HEAD@{4}: commit: rename a.txt a 7adfca0 HEAD@{5}: commit: commit a.txt b4017a8 HEAD@{6}: commit (initial): commit a # 然后使用reset回到bbb的版本内容下[root@node python-data02]# git reset --hard dbead4cHEAD 现在位于 e2da3c7 add bbb[root@node python-data02]# cat aaaabbbGit分支
分支便是平行空间,假设你在为某个手机体系研发照相功能,代码已经完成了80%,但假如将这不完备的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫”照相功能”的分支,这种分支只会属于你本身,而其他人看不到,等代码编写完成后再与原来的项目主分支归并下即可,如许即能包管代码不丢失,又不影响其他人的工作
一样平常在实际的项目开发中,我们要只管包管master分支黑白常稳固的,仅用于发布新版本,平常不要恣意直接修改内里的数据文件,而工作的时间则可以新建差别的工作分支,比及工作完成后在归并到master分支上面,以是团队的相助分支看起来会像上面图那样。
默认分支指向你末了一次的提交 HEAD头、指针
[root@node python-data02]# git log --oneline --decoratee2da3c7 (HEAD, master) add bbb6361a2e modified a3d15f11 rename a.txt addfe7c0 commit a.txt5f8ba1f commit aHEAD 指针指向哪个分支、说明你当前在哪个分支下工作
# 新建testing分支[root@node python-data02]# git branch testing# *号在那边就说明当前在哪个分支上入下图所示[root@node python-data02]# git branch * master testing通过下令检察分支指向
[root@node python-data02]# git log --oneline --decoratee2da3c7 (HEAD, testing , master) add bbb6361a2e modified a3d15f11 rename a.txt addfe7c0 commit a.txt5f8ba1f commit a切换到testing分支、对应的HEAD指针也指向了testing
[root@node python-data02]# git checkout testing切换到分支 'testing'[root@node python-data02]# git branch master* testingtesting分支:创建testing文件,而且添加到本地仓库
[root@node python-data02]# touch testing[root@node python-data02]# git add .[root@node python-data02]# git commit -m "commit testing"[testing 7541f6d] commit testing 3 files changed, 4 insertions(+) create mode 100644 testing
切换到master分支后指针指向到了master
[root@node python-data02]# git checkout masterSwitched to branch 'master'[root@node python-data02]# git branch * master testing# 正常环境下是没有testing文件的、包管master分支是线上环境的[root@node python-data02]# lltotal 24-rw-r--r-- 1 root root 4 May 17 11:48 a-rw-r--r-- 1 root root 0 May 17 11:48 b-rw-r--r-- 1 root root 0 May 16 17:02 c-rw-r--r-- 1 root root 0 May 17 11:16 dmaster分支:创建master文件,而且添加到本地仓库
[root@node python-data02]# touch master[root@node python-data02]# git add .[root@node python-data02]# git commit -m "commit master"[master 3a48226] commit master 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 master归并分支
# 提示输入描述信息 相当于git的‐m参数[root@node python-data02]# git merge testing[root@node python-data02]# git log --oneline --decorate3eb70df (HEAD, master) Merge branch 'testing'3a48226 commit master7541f6d (testing) commit testinge2da3c7 (test01) add bbb6361a2e modified a3d15f11 rename a.txt addfe7c0 commit a.txt5f8ba1f commit a辩说归并
[root@node python-data02]# echo master >>a[root@node python-data02]# git commit -am "modified a master"[root@node python-data02]# git checkout testingSwitched to branch 'testing'[root@node python-data02]# git branch master* testing[root@node python-data02]# echo "testing" >>a[root@node python-data02]# git commit -am "modified a on testing branch"[root@node python-data02]# git checkout master[root@node python-data02]# git merge testing主动归并 a 辩说(内容):归并辩说于 a 主动归并失败,修正辩说然后提交修正的结果。# 辩说的文件主动标识到文件里,手动更改辩说要保存的代码[root@node python-data02]# cat a<<<<<<< HEADmaster=======aaabbbccctesting>>>>>>> testing# 举行提交即可[root@node python-data02]# git commit -am "merge testing to master"[master ee8d9db] merge testing to master[root@node python-data02]# git log --oneline --decorateee8d9db (HEAD, master) merge testing to master2946ab2 (testing) modified a on testing branch1de1f0e modified a master3eb70df Merge branch 'testing'3a48226 commit master7541f6d commit testing# 删除分支‐d参数[root@node python-data02]# git branch -d testingDeleted branch testing (was 2946ab2).Git标签使用
标签也是指向了一次commit提交,是一个里程碑式的标签,回滚打标签直接加标签号,不必要加唯一字符串欠好记
# ‐a指定标署名字 ‐m 指定说明笔墨[root@node python-data02]# git tag v1.0 -m "aaa bbb version v1.0"[root@node python-data02]# git tagv1.0[root@node python-data02]# git log --oneline --decorateee8d9db (HEAD, master) merge testing to mastere2da3c7 add bbb# 指定某一次的提交为标签git tag -a v1.100 e2da3c7 -m "add bbb version v1.100"# 检察v1.0的信息 git show 加标签检察 git show v1.0# 直接还原数据到v2.0[root@node python-data02]# git reset --hard v1.100HEAD 现在位于 dbead4c add bbb# 删除标签 ‐d参数[root@node python-data02]# git tag -d v1.100Deleted tag 'v1.100' (was 61f1351) |