Git 学习

1.git工具基本含义

  git最大的用处就是记录每个版本的变动、比较每个版本的不同,以及多人维护和开发同一个项目。支持版本回退。

2.git基本命令

  a.创建版本库

   $ mkdir learngit //创建目录

  $ cd learngit  //进入目录
  $ pwd         //查看当前目录
  /Users/michael/learngit

  $ git init //创建本地版本库
  Initialized empty Git repository in /Users/michael/learngit/.git/

  $ git add readme.txt //将readme.txt添加到工作区
  $ git commit -m "test"//将readme.txt提交到本地仓库
  $git status //查看目前工作区又没有没有被提交到仓库的文件
  $git diff readme.txt //在提交到仓库之前查看那里做了改动(只能在提交到仓库之前)
  $git log //查看历史记录
  $git log --pretty=oneline //在一行上面显示历史记录
  $git reset --hard HEAD^ //回退到上一个版本(
$git reset --hard HEAD^ 表示回退到上上一一个版本
  $git reset --hard 版本代码 //回退到版本代码所代表的版本号(版本代码使用$git log 查看)
  $git reflog //显示操作后的每一个命令,包括回退版本,一般用于回退后后悔时,查看没有回退之前的版本号,然后使用$git reset --hard 版本号 ,来回到没有回退之前的版本
  $git diff HEAD -- readme.txt //查看工作区和版本库中readme.txt的不同
  $git checkout -- readme.txt //撤销最近一次对readme.txt的修改,如果还没有$git add 就回到没有修改的上一个版本,如果已经$git add后才修改,就回到刚刚$git add的状态
  $git reset HEAD readme.txt //将redme.txt从暂存区回退到工作区,然后使用$git checkout -- readme.txt 放弃工作区的修改
  $git rm readme.txt //从版本库中删除readme.txt(必须先将本地的readme.txt删除,才能使用这个命令。使用 rm readme.txt命令将本地readme.txt删除以后可以使用$git checkout -- readme.txt 将文件找回。$git checkout -- readme.txt,其实是用版本库中的版本替换工作区中的版本)
  
$ssh-keygen -t rsa -C "example@example.com" //创建本机SSH key 用于github 网站的密匙绑定,即让github服务器知道这台主机和你的github账号是关联的,邮件地址填写自己的,(创建完成之后,在根目录会有.ssh文件夹,里面有两个文件,id_rsa和id_rsa.pub,其中id_rsa.pub里就是需要绑定在github网站上的公匙)
  
$git remote add origin git@github.com:mingming/learngit.git //关联远程github服务器上的仓库,记得把git@github.com:mingming/learngit.git换成自己仓库的地址
  
$git push -u origin master //推送内容到远程仓库,并且将本地master分支和远程master分支关联起来(第一次推送使用)
  $git push origin master //推送本地master分支到远程master分支,(修改后直接使用此命令推送)
  $git clone
git@github.com:mingming/learngit.git //从远程仓库克隆,可以直接填充本地新仓库
  $git checkout -b dev //创建dev分支并且切换到dev分支
  $git branch dev // 创建dev分支
  $git checkout dev //切换到dev分支
  $git branch //列出所有分支
  $git merge dev //将dev分支的工作合并到当前分支
  $git branch -d dev //删除dev分支
  
$git log --graph --pretty=oneline --abbrev-commit //查看分支合并图
  
$git merge --no-ff -m "merge with no-ff" dev //以禁用Faste forword方式合并分支,合并完之后可以在历史中查看到曾经做过合并,而使用Faste forword方式则不会在历史记录中显示
  $git stash //保存工作区现场,(当临时有任务需要修改时,需要暂停本分支上面工作任务)
  $git stash list //查看本分支的工作现场列表
  $git stash apply //恢复本分支工作现场
  $git stash drop //删除stash内容
  $git stash pop //恢复本分支stash内容并且删除stash
  
$ git stash apply stash@{0} //恢复指定的stash
  $git branch -D dev //强制删除dev分支
  $git remote -v //查看远程库详细信息
  
$git checkout -b dev origin/dev //创建本地dev分支,
  
$git branch --set-upstream dev origin/dev //指定本地dev和远程关联
  $git tag V1.0 //给当前分支的版本号打上标签V1.用于标记自己的版本
  $git tag //查看所有标签
  $git tag V1.0 444444 //给commit id为444444的版本号打上标签
  $git show V1.0 //查看V1.0版本的详细信息
  $git tag -a V1.0 -m "shuo ming xin xi" //打上标签并且给出标签说明
  $git tag -d V1.0 //删除V1.0标签
  $git push origin V1.0 //推送V1.0标签
  $git push origin tags //推送所有标签
  
$git push origin :refs/tags/V1.0 //删除远程标签,(在此之前必须删除本地标签V1.0)
  
3.git的使用技巧
  a.远程仓库上可以fork别人的项目然后,clone到本地进行二次开发
  b.可以编写.gitignore文件实现添加到工作区的时候忽略其中某些文件
  c.两个人人,或者一个人在两台电脑上修改同一段代码,其中一方push到远程之后,另一方push时,必然要git pull一下更新本地仓库,然后查看双方修改的冲突在哪里,对冲突再次修改才能push到远程
  d.搭建git服务器
    。
$ sudo apt-get install git //在服务器端安装git软件
    。。$sudi adduser git //创建一个git用户,用来运行git服务。
    。。。收集需要登陆的用户的公匙(
id_rsa.pub文件里的),将所有用户的公匙导入到文件/home/git/.ssh/authorized_keys,一行一个,//人数少可以使用此文件,人数多了可以使用Gitosis来管理
    。。。
$ sudo git init --bare sample.git //在选定的作为仓库的目录中输入此命令,会创建一个名字为sample.git的空仓库
    。。。。
$ sudo chown -R git:git sample.git //把owner改成git
    。。。。。出于安全考虑,创建的git用户不允许登陆shell,通过将/etc/passwd里面的
git:x:1001:1001:,,,:/home/git:/bin/bash改为git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell即可,这样git用户就可以通过ssh链接,但是不能使用shell登陆
    。。。。。。在各自用户的电脑上使用
$ git clone git@server:/srv/sample.git 克隆仓库就OK