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

[经验分享] 版本控制--git

[复制链接]

尚未签到

发表于 2018-9-17 10:02:51 | 显示全部楼层 |阅读模式
1.1 Git的安装
1.1.1 版本
  # cat /etc/redhat-release

  CentOS>  # uname -r
  2.6.32-642.4.2.el6.x86_64
  # uname -m
  x86_64
1.1.2 安装
  可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。
  这里用的是yum安装
  [root@laowang ~]# rpm -qa git
  git-1.7.1-4.el6_7.1.x86_64
  [root@laowang ~]# yum  install git –y
  [root@laowang ~]# git --version
  git version 1.7.1
1.2 创建版本库
  什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
  所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
  创建版本库目录:
  [root@laowang /]# mkdir gitdir
  [root@laowang /]# cd gitdir/
  [root@laowang gitdir]# git init
  Initialized empty Git repository in/gitdir/.git/
  创建完版本库之后会多出一个隐藏文件
  [root@laowang gitdir]# ls -a
  . ..  .git
1.3 版本库内添加/修改文件 并提交
  [root@laowang gitdir]# touch file.txt           创建文件
  [root@laowang gitdir]# git add file.txt         添加到管理库
  [root@laowang gitdir]# git commit -m "addone file dor test"      提交
  [master (root-commit) d042b99] add one filedor test
  0files changed, 0 insertions(+), 0 deletions(-)
  createmode 100644 file.txt                                这里显示创建一个文件
  [root@laowang gitdir]# echo"test" >>./file.txt
  [root@laowang gitdir]# git commit -m"add one word for test"
  # On branch master
  # Changed but not updated:
  #  (use "git add ..." to update what will becommitted)
  #  (use "git checkout -- ..." to discard changes inworking directory)
  #
  #       modified:   file.txt                                 这里显示修改的文件名
  #
  no changes added to commit (use "gitadd" and/or "git commit -a")        没有文件提交
1.3.1 查看状态
  [root@laowang gitdir]# git status
  # On branch master
  # Changed but not updated:
  #  (use "git add ..." to update what will becommitted)
  #  (use "git checkout -- ..." to discard changes inworking directory)
  #
  #       modified:   file.txt
  #
  no changes added to commit (use "gitadd" and/or "git commit -a")
1.3.2 查看文件修改的内容
  [root@laowang gitdir]# git diff file.txt
  diff --git a/file.txt b/file.txt
  index 1153985..cf19221 100644
  --- a/file.txt
  +++ b/file.txt
  @@ -1,3 +1,3 @@
  test
  1234
  -5678                                删除的内容
  +789                                增加的内容
1.3.3 修改后的提交
  [root@laowang gitdir]# echo"0000">>file.txt
  [root@laowang gitdir]# git diff file.txt
  diff --git a/file.txt b/file.txt
  index 1153985..2744a10 100644
  --- a/file.txt
  +++ b/file.txt
  @@ -1,3 +1,4 @@
  test
  1234
  -5678
  +789
  +0000
  [root@laowang gitdir]# git add file.txt
  [root@laowang gitdir]# git status
  # On branch master
  # Changes to be committed:
  #  (use "git reset HEAD ..." to unstage)
  #
  #       modified:   file.txt
  #
  [root@laowang gitdir]# git commit file.txt -m"add 0000"
  [master ec76b27] add 0000
  1files changed, 2 insertions(+), 1 deletions(-)
  [root@laowang gitdir]# git status
  # On branch master
  nothing to commit (working directory clean)
1.4 版本的回退
  放我们对一个文件进行多次修改之后,若是想查看之前的修改记录,光是靠回忆肯定是不靠谱的。
  版本查看
  [root@laowang gitdir]# git log
  commit ec76b27efc328da568f9462563848d89aaa25a54
  Author: oldwang
  Date:   WedSep 21 05:07:29 2016 +0800
  add 0000
  commit 0ecd6c9c3a76c7028141ddc4242dcefa5f556c44
  Author: oldwang
  Date:   WedSep 21 05:01:23 2016 +0800
  add somenumbel
  commit d042b99b866063f7ed2594eea60d032e90402361
  Author: oldwang
  Date:   WedSep 21 04:42:19 2016 +0800
  add one file dor test
  若是嫌弃他们输出信息太多可以试试以下参数
  [root@laowang gitdir]# git log --pretty=oneline
  ec76b27efc328da568f9462563848d89aaa25a54add 0000
  0ecd6c9c3a76c7028141ddc4242dcefa5f556c44add some numbel
  d042b99b866063f7ed2594eea60d032e90402361add one file dor test
1.4.1 回退
  首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
  现在,我们要把当前版本“appendGPL”回退到上一个版本“adddistributed”,就可以使用git reset命令:
  [root@laowang gitdir]# git reset --hard HEAD^    回退到上一个版本
  HEAD is now at 0ecd6c9 add some numbel
  [root@laowang gitdir]# cat file.txt
  test
  1234
  5678
  [root@laowang gitdir]# git log --pretty=oneline
  0ecd6c9c3a76c7028141ddc4242dcefa5f556c44 add somenumbel
  d042b99b866063f7ed2594eea60d032e90402361 add onefile dor test
1.4.2 回溯
  [root@laowang gitdir]# git reset --hard 0ecd6c9c
  HEAD is now at 0ecd6c9 add some numbel
  [root@laowang gitdir]# git log
  commit 0ecd6c9c3a76c7028141ddc4242dcefa5f556c44
  Author: oldwang
  Date:   WedSep 21 05:01:23 2016 +0800
  add some numbel
  commit d042b99b866063f7ed2594eea60d032e90402361
  Author: oldwang
  Date:   WedSep 21 04:42:19 2016 +0800
  add one file dor test
1.4.3>  现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit>怎么办?
  在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit>git reflog用来记录你的每一次命令:
  [root@laowang gitdir]# git reflog
  0ecd6c9 HEAD@{0}: 0ecd6c9c: updating HEAD
  d042b99 HEAD@{1}: HEAD^: updating HEAD
  0ecd6c9 HEAD@{2}: HEAD^: updating HEAD
  ec76b27 HEAD@{3}: commit: add 0000
  0ecd6c9 HEAD@{4}: commit: add some numbel
  现在总结一下:
  1,HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
  2,穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  3,要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
1.5 Git的工作原理
  Git的工作分为三块:工作区、缓存区(stage)、库(./git)

1.6 撤销修改
1.6.1 当文件被提交到缓存区之后,如果在本地目录做了修改想要回退到缓存区的状态。
  [root@laowang gitdir]# vim file.txt
  [root@laowang gitdir]# cat file.txt
  zxas
  i will add it to stage
  i had add somethoing
  [root@laowang gitdir]# git checkout -- file.txt
  [root@laowang gitdir]# cat file.txt
  zxas
  i will add it to stage
1.6.2 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改
  分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步git checkout -- file
  [root@laowang gitdir]# echo "addsomething" >>./file.txt
  [root@laowang gitdir]# cat file.txt
  zxas
  i will add it to stage
  add something
  [root@laowang gitdir]# git add file.txt
  [root@laowang gitdir]# git status
  # On branch master
  # Changes to be committed:
  #   (use"git reset HEAD ..." to unstage)
  #
  #    modified:   file.txt
  #
  [root@laowang gitdir]# cat file.txt
  zxas
  i will add it to stage
  add something
  [root@laowang gitdir]# git reset HEAD file.txt
  Unstaged changes after reset:
  M    file.txt
  [root@laowang gitdir]# git status
  # On branch master
  # Changed but not updated:
  #   (use"git add ..." to update what will be committed)
  #   (use"git checkout -- ..." to discard changes in workingdirectory)
  #
  #    modified:   file.txt
  #
  no changes added to commit (use "git add"and/or "git commit -a")
  [root@laowang gitdir]# git checkout -- file.txt
1.6.3 已经提交了不合适的修改到版本库时,想要撤销本次提交
  本处参考版本回退
1.7 文件的删除
1.7.1 现在我们增加一个测试文件
  [root@laowang gitdir]# touch test.filr
  [root@laowang gitdir]# vim test.filr
  [root@laowang gitdir]# git add test.filr
  [root@laowang gitdir]# dit commit -m "add afile for test"
  -bash: dit: command not found
  [root@laowang gitdir]# git commit -m "add afile for test"
  [master 121fc12] add a file for test
  1 fileschanged, 1 insertions(+), 0 deletions(-)
  create mode100644 test.filr
1.7.2 删除文件
  [root@laowang gitdir]# git status
  # On branch master
  # Changed but not updated:
  #   (use"git add/rm ..." to update what will be committed)
  #   (use"git checkout -- ..." to discard changes in workingdirectory)
  #
  #    deleted:    test.filr
  #
  no changes added to commit (use "git add"and/or "git commit -a")
  状态告诉我们文件删除之后我们有两种选择:
  1、  吧删除的数据提交到版本库
  2、  吧工作区回退到缓存区(就是文件没被删除之前)
  现在你有两个选择,
1.7.3 从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
1.7.4 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
  [root@laowang gitdir]# git checkout --test.filr
  [root@laowang gitdir]# ls
  file.txt test.filr
  [root@laowang gitdir]# cat test.filr
  test somethinhg
1.8 分支
1.8.1 创建分支
  创建分支dev
  root@laowang gitdir]# git checkout -b dev
  Switched to a new branch 'dev'
  git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
  git branch dev
  gitcheckout dev
  Switched to branch 'dev'
1.8.2 查看分支
  [root@laowang gitdir]# git branch
  * dev
  Master
1.8.3 切换分支
  [root@laowang gitdir]# git checkout master
  Switched to branch 'master'
1.8.4 合并分支
  git merge dev
  git merge 是合并的命令 后面接合并的分支名,表示合并dev到当前分支
1.8.5 删除分支
  在合并之后,之前的分支就可以删除了
  [root@laowang gitdir]# git branch
  dev
  * master
  [root@laowang gitdir]# git branch -d dev
  Deleted branch dev (was df323f3).
  [root@laowang gitdir]# git branch
  * master
1.8.6小结
  Git鼓励大量使用分支:
  查看分支:git branch
  创建分支:git branch
  切换分支:git checkout
  创建+切换分支:git checkout -b
  合并某分支到当前分支:git merge
  删除分支:git branch -d


运维网声明 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-588135-1-1.html 上篇帖子: 记录一次git的误删除操作--恢复 下篇帖子: Eclipse安装git插件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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