git使用教程

1.本地git的使用

1.1 本地git仓库的组成

  • 工作区:本地git仓库的编辑内容所在的区域,所有可见的文件都包含在此区域内。
  • 版本库:初始化本地git仓库后,在文件夹内生成的.git文件夹。版本库又包含以下内容:
    • 暂存区(stage或index):工作区所做的修改会先提交到该区域
    • 分支区:暂存区中存储的修改会合并到该区域中的当前分支。
      1. 分支区包含的分支,由commit节点按照commit时间顺序链接构成;
      2. 分支区可以有多个版本分支,但所有分支由同一个commit节点延伸而出。
      3. 在分支区,存在一个HEAD指针,指向当前分支的当前commit节点,而当前的合并操作都针对该HEAD指针指向的commit节点。
      4. 每条分支都有一个分支名称,每个commit节点都有一个commit_id

1.2 本地git仓库的配置

1.2.1 git软件的安装与账户的配置

  • Linux系统中,可编译git软件源码安装,或者从软件仓库直接安装;
  • windows系统中,可下载windows软件包,点击安装;
  • Mac系统中,可通过homebrew安装,也可在Xcode集中工具里安装。

在系统中安装好git软件后,可通过在命令行中输入git命令查看是否安装成功。安装成功能够git软件后,需要在命令行中配置账户、邮箱等配置项:

  • 配置账户:git config --global user.name [用户名]
  • 配置邮箱:git config --global user.email [用户邮箱]
  • 配置git提示语句显示不同颜色:git config color.ut true

git config命令的--global参数,表示配置针对当前系统的所有git仓库。不使用该参数,也可针对单一的git仓库进行配置。

1.2.2 git仓库的初始化

选定一个空目录,作为git仓库的存储区域,此时使用git init命令将该目录初始化为本地git仓库。初始化后的git仓库,其所在目录会生成一个.git文件夹,此文件夹为版本库所在空间。

1.3 本地git的使用

1.3.1 修改内容的提交、合并

  • 添加文件,修改文件内容的提交:git add [文件名]

  • 删除文件、文件夹的提交:git rm (-r) [文件名或文件夹名]

    注:git rm命令的-r参数针对文件夹,删除文件不需要该参数。

  • 提交内容的合并:git commit -s -m [commit节点的注释]

    注:git commit命令的-s参数,会在commit节点中添加提交账户。

使用git diff [文件名]可比较文件修改提交后的内容差异;使用git status命令,会显示出未合并的所有文件操做,包括添加文件,修改文件内容,删除文件、文件夹等;使用git reflog命令,可查看所有合并记录。

1.3.2 本地git仓库的回退

  • 未提交内容的回退:git checkout -- [文件名]

  • 已提交内容的回退:git reset HEAD [文件名]

    注:此时仅回退暂存区中的内容,工作区中的内容并未改变。

  • 已合并内容的回退:git reset --hard HEAD^

    注1:git reset--hard参数,表示HEAD指针的指向移动。

    注2:HEAD加n个^,表示当前HEAD指针指向的当前分支当前commit节点的前n个commit节点位置,也可用HEAD~n表示。

  • 当前分支,不同commit节点间的跳动:git reset --hard [commit_id]

    注1:在每次合并代码的过程中,每个commit节点将对应生成对应的commit_id。将HEAD指针指向不同commit_id,则分支区中当前分支的当前commit节点发生改变。

    注2:当使用HEAD指针向当前commit节点之前commit节点跳动,则在关闭命令行窗口前,后面的commit节点不会消失,仍能使用commit_id会跳,但已无法用git log查看。

使用git log命令,可查看当前分支的所有commit节点。当git log命令使用--pretty=oneline参数,可将当前分支的commit节点记录以每行一条的形式显示。当git log命令使用--graph参数,可显示所有分支的commit节点记录。

1.3.3 本地git仓库的分支管理

  • 分支的创建:git branch [新分支名]

  • 分支的切换:

    • 新版切换分支命令:git switch [分支名]
    • 老版切换分支命令:git checkout [分支名]

    注:在使用新版切换分支命令git switch时,使用-c参数,可实现创建新分支,并切换到新分支的效果;在使用老版切换分支命令git checkout时,使用-b参数,也可实现创建新分支,并切换到新分支的效果。

  • 分支的合并:git merge [指定分支名]命令,可将指定分支与当前分支合并。

  • 分支的删除:

    • 已合并的分支删除:git branch -d [分支名]
    • 未合并的分支删除:git branch -D [分支名]
  • 分支的查看:

    git一般会采用Fast forward模式,在该模式下,删除分支,会丢掉分支信息。此时git log --graph无法查看到已删除分支的commit节点信息。

    在合并分支时,对git merge命令使用--no-ff参数,可强制禁止Fast forward模式。此时git log --graph可查看到已删除分支的commit节点信息。

    • git branch可列出所有分支;
    • git log --graph --pretty=oneline可列出所有分支的所有commit节点。
  • 跨分支的提交:使用git cherry-pick [commit_id]命令,可将某次特定的提交合并到当前分支中。

  • stash暂存的使用:

    1. 使用git stash命令,可将当前未合并到当前分支的修改工作暂存到当前分支上(此时使用git status不可见,但使用git stash list可见);
    2. 当切换回当前分支后,可使用git stash list查看当前分支的stash暂存内容:
      • 使用git stash apply命令,可将stash暂存中的修改工作内容恢复到当前分支中,但stash暂存中的修改工作内容并不会被删除。
      • 使用git stash pop命令,可将stash暂存中的修改工作内容恢复到当前分支中,并将stash暂存中的修改工作内容删除。

1.3.4 本地git仓库的标签操作

标签是指向commit节点的指针,适合做版本标注。

  1. 标签的创建:
    • 当前分支当前commit节点处的标签创建:git tag [新标签名]
    • 任意commit节点处的标签创建:git tag [新标签名] [commit_id]
    • 带注释的标签创建:git tag -a [新标签名] -m [标签注释] [commit_id]
  2. 标签的查看:
    • git tag命令可列出所有标签。标签不是按照创建时间排列显示,而是安装名称排序显示。
    • git show [标签名]命令,可查看特定的标签所指向的commit节点的状况。
  3. 标签的删除:git tag -d [标签名]

2. git服务器

2.1 密钥的生成

使用ssh-keygen -t rsa -C [用户邮箱]创建SSH key,此时会在.ssh目录下生成id_rsaid_rsa.pub两个文件,其中id_rsa.pub文件存储公钥,而id_rsa存储私钥。

2.2 本地git服务器的搭建

2.2.1 搭建git服务器

  1. 安装git软件:

  2. 创建git管理用户:sudo adduser [用户名]

  3. 创建证书登陆:将所有用户的id_ras.pub文件中的公钥导入到.ssh目录下的authorized_keys文件中,每行一个用户的公钥;

  4. 初始化git仓库:

    1. 选择存放仓库的空白目录,在该目录内,使用sudo git init --bare [仓库名].git命令初始化git仓库;

    2. 修改仓库的的管理账户:使用sudo chown -R [管理用户分组]:[管理用户用户名] [仓库名].git命令

      注:-R参数 表面将目录的权限以递归的形式修改(即当前目录和所有子目录的权限一起修改)。

  5. 禁止本地shell登陆,改为远程ssh登陆:将/etc/passwd文件的:/home/git:/bin/bash改为:/home/git:/bin/git-shell

2.2.2 管理公钥

  • 开发人员较少:将所有开发人员的公钥导入到.ssh目录下的authorized_keys文件中即可。
  • 开发人员较多:Gitosis软件

2.2.3 管理权限

使用Gitolite工具。

2.3 在线git服务器

2.3.1 在线git服务器的配置

  1. 创建在线git服务账号:
  2. 将本机git公钥导入在线git服务账号中:
  3. 创建线上git仓库:
  4. 将本地git仓库与线上git仓库关联:git remote add [线上仓库本地命名] [线上仓库地址]

2.3.2 git服务器的使用

  • 本地仓库的提交

    • 第一次:git push -u [线上仓库本地命名] [本地仓库分支名]

    • 非第一次:git push [线上仓库本地命名] [本地仓库分支名]

      注:git push命令的-u参数,是将本地仓库分支与线上仓库分支关联。

    使用git remote命令可查看所有线上分支情况。

  • 远程仓库的克隆:git clone [线上仓库地址]

    注:线上仓库地址有ssh、https等多种协议,其中ssh协议是最快的。

  • 标签的操作

    • 推送一个本地标签:git push [线上仓库本地命名] [标签名]
    • 推送所有本地未推送的标签:git push [线上仓库本地命名] --tags
    • 删除一个远程标签:git push [线上仓库本地命名] :refs/tags/[标签名]

你可能感兴趣的:(git使用教程)