Git

Git

git安装

在 Linux 上安装

  • Centos(无维护):sudo dnf install git-all
  • Debian:sudo apt install git-all

在 Windows 上安装

  • 直接下载安装文件,别下载压缩包,压缩包没环境
  • 源文件安装,比较麻烦,有必要就按需安装

初次运行git前的配置

用户信息

1
2
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"

获取帮助

对于不清楚的命令直接帮助搜索就好了:git help <verb>

git基础

获取git仓库

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库。
  2. 从其它服务器 克隆 一个已存在的 Git 仓库。
  1. 在已存在目录中初始化仓库
1
2
3
4
5
6
7
8
9
10
11
12
13
//在 Linux 上:
cd /home/user/my_project
//在 macOS 上:
cd /Users/user/my_project
//在 Windows 上:
cd /c/user/my_project
//之后执行:
git init

//跟踪文件
git add *.c
git add LICENSE
git commit -m 'initial project version'
  1. 克隆现有的仓库
    git clone https://

记录跟新

文件追踪流程:未追踪=>暂存状态;未修改状态=>修改状态=>暂存状态;暂存状态=>提交之后就会回到未修改状态,同时会删除未追踪的文件,更新为提交版本的文件了,这就是一个完整的文件循环流程。即像竹子一样节节高升,平稳推进。

  1. 跟踪新文件:git add xxxx.js git add .;

  2. 查看状态:git status

  3. 忽略文件,特别是依赖包和一些工具测试文件:创建.gitignore文件

    • .gitignore 的格式规范如下:
    • 所有空行或者以 # 开头的行都会被 Git 忽略。
    • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
    • 匹配模式可以以(/)开头防止递归。
    • 匹配模式可以以(/)结尾指定目录。
    • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //忽略所有的 .a 文件
    *.a
    //但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
    !lib.a
    //只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
    /TODO
    //忽略任何目录下名为 build 的文件夹
    build/
    //忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt
    //忽略 doc/ 目录及其所有子目录下的 .pdf 文件
    doc/**/*.pdf
  4. 查看已暂存和未暂存的修改

    1. git diff
    2. git diff --staged 暂存
  5. 提交更新:git commit -m "xxx"

  6. 移除文件: git rm fileName

  7. 移动文件:git mv file_from file_to

查看提交历史

  1. git log
  2. git log -p -2;最近两次提交按照补丁patch格式显示
  3. git log -stat;进行代码审核,查看变化很有用;

撤销操作

  1. git commit --amend 补充文件,重新提交;
    1
    2
    3
    git commit -m 'initial commit'
    git add forgotten_file
    git commit --amend
  2. 取消暂存的文件:git reset HEAD CONTRIBUTING.md
  3. 撤销对文件的修改(不建议使用;操作很危险):git checkout -- CONTRIBUTING.md

远程仓库使用

  1. 查看远程仓库:
    1. git remote
    2. git remote -v 远程仓库使用的git保存的简写与其对应的url
    3. 查看某个远程仓库:git remote show origin
  2. 添加远程仓库
    1. git remote add xxx https://
  3. 从远程仓库中抓取与拉取
    1. git fetch <remote> 需要手动合并
    2. git pull 自动合并
  4. 推送到远程仓库:git push origin master
  5. 远程仓库的重命名与移除:git remote rename xxx yyy;git remote remove yyy

打标签

  1. 列出标签:git tag 参数:-l(-list);
  2. 创建标签:
    1. 附注标签:git tag -a v1.4 -m "my version 1.4"
    2. 轻量标签:git tag v1.4-lw=git tag tagName;
    3. 后期打标签进行版本控制管理:git tag -a v1.2 9fceb02
  3. 删除标签:git push origin --delete <tagName>

git别名

  1. 通过git config文件设置命令别名

git分支

  1. 创建分支:git branch branchName
  2. 分支切换,注意暂存及时提交:git checkout branchName;

分支的创建与合并

  1. 新建分支包括hotfix修复上线项目bug:git checkout -b hoxFixBranchName
  2. 分支合并:git checkout master,git merge hoxFixBranchName,删除不需要的分支:git branch -d hoxFixBranchName
  3. 冲突合并,根据实际更改情况保留,一般在vscode中比较一下然后手动合并;

分支管理

  1. 查看分支列表:git branch 参数-v是查看每个分支最后一次提交

远程分支

  1. 查看远程分支:git remote show <remote>
  2. 推送:git push origin hotFixBranch
  3. 跟踪分支:git checkout --track origin/hotFixBranch
  4. 删除远程分支:git push origin --delete hotFixBranch

变基

  1. 变基:git rebase master;你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
  2. 变基风险:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。(简单来讲,未审核代码直接被别人拿来用就有系统性风险);

服务器上的git

在服务器上搭建 Git

  1. 裸仓库:git clone --bare my_project my_project.git;效果相当于:cp -Rf my_project/.git my_project.git
  2. 把裸仓库放到服务器上:
    1. 既然你有了裸仓库的副本,剩下要做的就是把裸仓库放到服务器上并设置你的协议。 假设一个域名为 git.example.com 的服务器已经架设好,并可以通过 SSH 连接, 你想把所有的 Git 仓库放在 /srv/git 目录下。 假设服务器上存在 /srv/git/ 目录,你可以通过以下命令复制你的裸仓库来创建一个新仓库:scp -r my_project.git user@git.example.com:/srv/git;

    2. 此时,其他可通过 SSH 读取此服务器上 /srv/git 目录的用户,可运行以下命令来克隆你的仓库。git clone user@git.example.com:/srv/git/my_project.git

    3. 如果到该项目目录中运行 git init 命令,并加上 –shared 选项, 那么 Git 会自动修改该仓库目录的组权限为可写。 注意,运行此命令的工程中不会摧毁任何提交、引用等内容。

      1
      2
      3
      ssh user@git.example.com
      cd /srv/git/my_project.git
      git init --bare --shared

生成SSH公钥

  1. 生成 SSH 公钥:ssh-keygen -o

    1
    2
    3
    4
    5
    // 查看ssh
    cd ~/.ssh
    ls
    // 直接查看默认路径下的ssh公钥
    cat ~/.ssh/id_rsa.pub

Git小结

  1. git初始化:git init

  2. git config配置:

    1
    2
    git config --global user.name "hzw728@qq.com"
    git config --global user.email "hzw728@qq.com"
  3. 添加到暂存区:git add .

  4. 提交到本地库:git commit -m "fist commit"

  5. 版本穿梭:

    1. 查看提交情况:git status
    2. 查看提交日志:git log
    3. 查看操作记录:git reflog
    4. head版本回滚:git reset --hard 919a8bc
    5. head版本回滚一次:git reset --hard HEAD^
    6. 暂存区重新写注释:git reset --soft HEAD^,git commit -m "new commit"
    7. 暂存区版本撤销并且重新生成一次最新记录:git revert HEAD
    8. git reset与git revert的区别:
      1. git reset 回退到指定版本,相当于是隐藏了commit-id之后的记录,并且不会产生新的commit-id的记录,如果要推送到远端服务器,需要强制推送-f,强制推送对其他使用你的分支代码会有影响,慎用。
      2. git revert 回退到指定版本,但是重新生成一条新的commit-id记录,对其他提交记录没有影响,推送到远端服务器直接push就好了。
  6. 分支管理:

    1. 创建分支:git branch branchName
    2. 切换分支:git checkout branchName
    3. 合并分支:git merge branchName
    4. 删除分支:git branch -d branchName
  7. 远程分支管理:

    1. 添加远程分支:git remote add origin https//
    2. 查看远端分支:git remote -v
    3. 推送到远端分支:git push origin master
    4. 记录推送默认远端分支:git push -u origin master
    5. 删除远程分支:git push origin --delete hotFixBranch,或者git push origin :hotFixBranch
    6. 拉取远端分支:git pull origin dev
  8. 团队开发:

    1. 每天第一件事就是拉取git pull更新一下代码
    2. 下班前提交代码,避免断电导致硬件故障导致本地代码丢失
  9. gitignore


Git
http://chasingbalance.top/2023/01/13/git/
作者
hanzhiwei
发布于
2023年1月13日
许可协议