设为首页 收藏本站
查看: 700|回复: 0

[经验分享] GIT入门介绍

[复制链接]

尚未签到

发表于 2018-9-17 09:13:34 | 显示全部楼层 |阅读模式
  现在git已经成为当下最流行的版本管理系统,不管是从事的是开发还是运维或者是与之相关的工作岗位,了解一下git的强大之处是非常有必要的。本文为自己的学习笔记,借鉴与廖雪峰老师的git教程,(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ )有不足之处大家可以互相交流。
  GIT介绍
  “Talk is cheap, Show me the code.” 说到git不得不提一下它的作者Linus-Linux神话的缔造者,虽然才过不惑之年,但已经两次改变了世界。咳咳...简单膜拜之后,开始进入我们的正题吧 ~
  git是分布式版本控制系统,这种优于集中式系统的架构是它流行原因之一。与SVN的集中式版本管理不同的是,git可以让每个客户端保留一个完整的版本,所以当开发者在进行自己的工作时,不必联网,当自己的工作完成之后可以先提交到本地,等待有网络的情况下再提交到服务器。当然这只是git的一个优点,在分支管理方面,git的表现也是其它系统无法望其项背的。
  安装部署GIT
  GIT可以在我们常见的系统中安装,但是作为一名忠实的Linux爱好者,我更倾向于直接在Linux上进行安装。下面就简单的了解一下Linux安装方式.
  这里使用的是CentOS7的系统作为示例:
[root@work ~]# uname  -a  
Linux work 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  查看系统是否安装git:
[root@work ~]# git  
-bash: git: command not found
  没有,那就装上吧:
[root@work ~]# yum install  -y git  由于是多人使用的版本控制系统,所以我们要标示上自己的个人账户:
[root@work ~]# git config --global user.name "trying"  # Your name  
[root@work ~]# git config --global user.email "trying@example.com" # Your Mail
  创建本地git 仓库:
[root@work ~]# mkdir gitrepo  
[root@work ~]# cd gitrepo
  
[root@work gitrepo]# git init      # 初始化git仓库,会在此目录生成一个.git的目录
  
Initialized empty Git repository in /root/gitrepo/.git/
  创建了本地的git 仓库会生成一个.git的目录,此目录中记录以后所有对代码的改动信息。值得注意的是,所有的版本控制系统只能追踪文本的改动信息,如代码,网页,txt文件等,对于视频,图片这种二进制的文件是无法追踪其具体的变化的。
  提交一个文件到git 仓库
  在创建了一个git 仓库之后,我们就可以尝试添加一个文件到我们的git仓库中了。
  创建一个文件:
[root@work gitrepo]# echo "Welcome to gitrepo! " > readme.txt  添加一个文件到仓库:
[root@work gitrepo]# git add readme.txt # 可以一次添加多个文件,也分多次添加  将文件提交到仓库:
[root@work gitrepo]# git commit -m "my first git file"  
[master (root-commit) 031cca7] my first git file
  
1 file changed, 1 insertion(+)
  
create mode 100644 readme.txt
  执行了git commit之后,文件就提交到仓库了,-m 参数是对本此提交的一个说明,在实际的开发过程中,需要对每次提交的内容作说明,这样更加方便识别和管理。
  当对文件再次改动:
[root@work gitrepo]# echo  "change it +1" >> readme.txt  
[root@work gitrepo]# cat readme.txt
  
Welcome to gitrepo!
  
change it +1
  使用git status和git diff 命令可以时刻掌握文件修改的状态和内容:
[root@work gitrepo]# git status  
# On branch master
  
# Changes not staged for commit:  # 显示文件已经被更改,但是还没有提交。
  
#   (use "git add ..." to update what will be committed)
  
#   (use "git checkout -- ..." to discard changes in working directory)
  
#
  
#       modified:   readme.txt
  
#
  
no changes added to commit (use "git add" and/or "git commit -a") # 提示需要add
  

  
[root@work gitrepo]# git diff   # 查看修改前后的内容,类似于linux的diff命令
  
diff --git a/readme.txt b/readme.txt
  
index 42c334d..238398e 100644
  
--- a/readme.txt
  
+++ b/readme.txt
  
@@ -1 +1,2 @@
  
Welcome to gitrepo!
  
+change it +1                   # 新添加的内容
  然后在对修改的文件进行提交,同时查看git status 在这个过程中的变化:
[root@work gitrepo]# git add readme.txt  
[root@work gitrepo]# git status  # 执行add命令后,显示需要commit这个文件
  
# On branch master
  
# Changes to be committed:
  
#   (use "git reset HEAD ..." to unstage)
  
#
  
#       modified:   readme.txt
  
#
  

  
[root@work gitrepo]# git commit -m "change +1"
  
[master 58a7726] change +1
  
1 file changed, 1 insertion(+)
  
[root@work gitrepo]# git status # 提交完成后,显示工作目录为空,没有需要提交的内容。
  
# On branch master
  
nothing to commit, working directory clean
  版本控制与文件修改
  当我们使用git 提交了多个版本,需要查看之前提交的版本信息,可以使用git log命令查看:
[root@work gitrepo]# git log  
commit c78d925cd2ce9836cd607089b958a48c8959b1d6
  
Author: trying
  
Date:   Mon Dec 12 15:34:19 2016 +0800
  

  
    change +3    # 从近到远,依次显示提交的commit信息
  

  
commit 8d255bedddd881e4fa70b2c2e6e9b6b14e54f41b
  
Author: trying
  
Date:   Tue Aug 9 01:02:08 2016 +0800
  

  
    change +2
  

  
commit 58a7726b7e0f7a05b6b8077578e4085b423956d1
  
Author: trying
  
Date:   Tue Aug 9 00:41:55 2016 +0800
  

  
    change +1
  

  
commit 031cca7e6021aee8c8a4fba49790c59c53990a4f
  
Author: trying
  
Date:   Tue Aug 9 00:08:34 2016 +0800
  

  
    my first git file
  git log命令显示从最近到最远的提交日志,如果想简化输出可以使用 --pretty=oneline参数:
[root@work gitrepo]# git log  --pretty=oneline  
c78d925cd2ce9836cd607089b958a48c8959b1d6 change +3
  
8d255bedddd881e4fa70b2c2e6e9b6b14e54f41b change +2
  
58a7726b7e0f7a05b6b8077578e4085b423956d1 change +1
  
031cca7e6021aee8c8a4fba49790c59c53990a4f my first git file
  查看这些有什么用呢,哈哈,相信聪明的你已经发行了,这里输出的日志中都包含了一个ID,通过这个ID 我们就可以回退到我们想要的版本,如我们要回退到上一个版本,git reset:
[root@work gitrepo]# git reset --hard 8d255be  
HEAD is now at 8d255be change +2
  
[root@work gitrepo]# cat readme.txt # 查看文件发现已经变回之前的内容
  
Welcome to gitrepo!
  
change it +1
  
change +2
  这里使用的是指定ID来回退到指点的版本,其实我们还有一个更加便捷的方法,可以使用HEAD^来回退:
[root@work gitrepo]# git reset --hard HEAD^ # HEAD^前一个版本 HEAD^^前两个版本  
HEAD is now at 58a7726 change +1
  
[root@work gitrepo]# cat readme.txt
  
Welcome to gitrepo!
  
change it +1
  这里用 “^” 来指定版本,几个“^”就表示回退几次,当然,如果回退的版本有点多可以使用HEAD~100,回退到100次版本前。
  查看日志:
[root@work gitrepo]# git log --pretty=oneline  
58a7726b7e0f7a05b6b8077578e4085b423956d1 change +1
  
031cca7e6021aee8c8a4fba49790c59c53990a4f my first git file
  通过查看日志,我们发现我新编辑的更新没有了,如果ID也没记住,那岂不是回不到最新的内容了/(ㄒoㄒ)/~~ ,别担心git都帮我们想到了,使用git reflog:
[root@work gitrepo]# git reflog  
58a7726 HEAD@{0}: reset: moving to HEAD^
  
8d255be HEAD@{1}: reset: moving to 8d255be
  
c78d925 HEAD@{2}: commit: change +3
  
8d255be HEAD@{3}: commit: change +2
  
58a7726 HEAD@{4}: commit: change +1
  
031cca7 HEAD@{5}: commit (initial): my first git file
  发现了吧,我们所有的操作都被记录了,这里面就包含了每次操作的ID,这样,我们又可以找到我们最新的版本,“快进” 到未来:
[root@work gitrepo]# git reset --hard c78d925  
HEAD is now at c78d925 change +3
  
[root@work gitrepo]# cat readme.txt
  
Welcome to gitrepo!
  
change it +1
  
change +2
  
change it 3
  这样通过git reset --hard  和 git log,git reflog 命令我们可以让文件回到过去的任意状态。
  GIT缓存区和工作区
  在使用git add 命令的时候,实际上是将我们的编辑的文件提交到GIT的缓存区,然后再使用git commit 命令将文件从缓存区提交到本地仓库,如果不执行git add 添加文件,那么缓存区就不会记录此文件,后面再次更改文件内容时就不会在执行git commit时提交。 如果对文件进行了git add 之后,再次对文件修改,需要重新执行git add 添加此文件,最后执行git commit 的时候,会记录最后一次git add 的文件更改。
  撤销工作区修改内容:
  有时会出现这样一种情况,在我们的工作区(git仓库目录)修改了大量文件,但是最后你发现文件全部都改错了! 是的,遇到这种尴尬的情况应该怎么办呢,回退到上一版本?显然这样不科学,尤其是本地没有上一版本的时候,其实不必担心,此时执行git status就能获得提示:
[root@work gitrepo]# git status  
# On branch master
  
# Changes not staged for commit:
  
#   (use "git add ..." to update what will be committed)
  
#   (use "git checkout -- ..." to discard changes in working directory)
  
#
  
#       modified:   readme.txt
  
#
  
no changes added to commit (use "git add" and/or "git commit -a")
  提示告诉我们要撤销工作目录改变的文件可以使用git checkout -- :
[root@work gitrepo]# git checkout -- readme.txt  #一条命令即可  撤销暂存区修改内容:
  比上面更加尴尬的一种情况是,不仅修改了工作区的内容,而且还将错误的内容使用git add 提交到了暂存区,这时候怎么办呢,让我们再看看git status 说什么吧:
[root@work gitrepo]# git status  
# On branch master
  
# Changes to be committed:
  
#   (use "git reset HEAD ..." to unstage)
  
#
  
#       modified:   readme.txt
  
#
  提示我们使用git  reset HEAD 来从暂存区撤销,试一下效果:
[root@work gitrepo]# git reset HEAD readme.txt  
Unstaged changes after reset:
  
M       readme.txt
  

  
[root@work gitrepo]# git status # 查看撤销后的状态,回到了git add之前的情况
  
# On branch master
  
# Changes not staged for commit:
  
#   (use "git add ..." to update what will be committed)
  
#   (use "git checkout -- ..." to discard changes in working directory)
  
#
  
#       modified:   readme.txt
  
#
  
no changes added to commit (use "git add" and/or "git commit -a")
  然后在再使用上面的命令,撤销工作区的更改:
[root@work gitrepo]# git  checkout -- readme.txt  
[root@work gitrepo]# git status
  
# On branch master
  
nothing to commit, working directory clean
  这样,所有的更改都已经撤销了。
  如果不幸执行了commit命令,可以通过版本回滚版本来回到之前的状态,但是如果已经推送到远程仓库,那就呵呵了。如果改动直接上线,可以通过持续集成服务器,可以快速恢复,不过此时或多或少会影响到线上的业务。
  删除文件
  如果我们想删除本地版本库中的文件,可以直接执行下面两条命令:
[root@work gitrepo]# rm -f aa.txt        # 删除本地文件  
[root@work gitrepo]# git rm aa.txt       # 删除版本库文件,并且commit提交
  
rm 'aa.txt'
  
[root@work gitrepo]# git commit -m "del aa.txt"
  
[master 59f04b4] del aa.txt
  
1 file changed, 0 insertions(+), 0 deletions(-)
  
delete mode 100644 aa.txt
  使用git rm  和 git commit 来删除版本库中的文件。
  但是如果本地文件不小心删除错了,只要我们版本库中提交过就可以快速恢复:
[root@work gitrepo]# git checkout -- readme.txt[root@work gitrepo]# rm -f readme.txt  
[root@work gitrepo]# ll
  
total 0
  
[root@work gitrepo]# git status
  
# On branch master
  
# Changes not staged for commit:
  
#   (use "git add/rm ..." to update what will be committed)
  
#   (use "git checkout -- ..." to discard changes in working directory)
  
#
  
#       deleted:    readme.txt
  
#
  
no changes added to commit (use "git add" and/or "git commit -a")
  

  
[root@work gitrepo]# git checkout -- readme.txt
  
[root@work gitrepo]# ll
  
total 4
  
-rw-r--r--. 1 root root 69 Dec 12 18:36 readme.txt  # 文件又回来了!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588089-1-1.html 上篇帖子: git入门(6.repo) 下篇帖子: 【Step by step】win10下使用git(修改中)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表