git

  • [ 环境准备 ]
  • [ 安装 ]
    • ubuntu
      sudo apt install git-all
    

  • [ 查看配置项及其所在文件 ]
  •   git config --list --show-origin
    

  • [ 配置文件 ]
  • Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量

    1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)

    2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。

    3. 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)

  • [ 用户信息 ]
  • 安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:

      git config --global user.name 'Jack'
      git config --global user.email jack@example.com
    

    当然,也可以打开 ~/.gitconfig 文件进行处理

  • [ 配置默认编辑器 ]
  •   git config --global core.editor code
    

  • [ 查看帮助 ]
    • verb 代表工具命令,比如 config
      git help <verb>
    
    • 简洁的帮助内容,可以使用 -h 后缀
      git config -h
    

  • [ 获取仓库 ]
  • [ 从本地建立仓库 ]
    • 进入项目目录,然后执行初始化仓库,无论项目中是否有文件都不影响
      git init
    
    • 初始化后,仓库并不会自动跟踪项目文件,需要通过 add 命令 和 commit 命令来建立跟踪
    • 或者在编辑了 .gitignore 文件后,通过 add . 命令统一进行添加,然后commit。
      git add .
      git commit -m 'initial project version'
    

  • [ 克隆远程仓库到本地 ]
    • url 为仓库地址
      git clone <url>
    
    • 指定项目名称,执行以下命令,会将克隆的项目在本地重命名
      git clone <url> <project_name>
    
    • Git 支持多种数据传输协议:https:// 协议、 git:// 协议或者使用 SSH 传输协议

  • [ 版本更新 ]
  • [ 查看文件状态 ]
  •   git status
    

  • [ 添加文件到暂存区 ]
    • 提交指定文件到在存取
      git add <filename>
    
    • 提交所有新状态的文件到暂存区
      git add .
    

  • [ 查看状态差异 ]
    • 未暂存文件状态差异
      git diff
    
    • 已暂存文件和最后一次提交之间的状态差异
      git diff --staged
    

  • [ 提交更新 ]
    • 引号内部填写更新说明
      commit -m 'some thine update'
    
    • 跳过 add 环节,直接提交所有状态更新的文件,给 commit 命令加上 -a 后缀即可
      commit -a -m 'something update'
    

  • [ 移除文件 ]
    • 直接 rm 文件只会移除文件本身,但还是再git的跟踪当中,建议的方式是通过 git rm 命令来移除文件,同时也会解除文件跟踪
      git rm <file>
    

  • [ 移动文件 ]
    • 如果要移动文件或者重命名,建议使用 git mv 命令而不是直接使用 mv 命令,这有助于git更好的呈现文件状态给我们
      git mv <file> <new_file>
    

  • [ 查看提交日志 ]
  •   git log
    

  • [ 常用选项 ]
    • -p 显示提交所引入的差异
    • -n n为数字,表示只显示最近提交的n条更新记录
    • -stat 显示每次提交的简略统计信息
    • -pretty 这个选项可以使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一:
    • -pretty=format 自定义显示格式,
      git log -p
      git log -pretty=online
    
    • 选项参考
    • 当 oneline 或 format 与另一个 log 选项 --graph 结合使用时尤其有用。 这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史
    • git log 命令还可以限制查看的提交时间,具体这里不做解释,可以查询官方文档

  • [ 常用的撤销操作 ]
  • [ 重新提交,这样会覆盖之前的提交信息 ]
  •   commit -m 'some update' --amend
    

  • [ 取消暂存 ]
  •   git reset HEAD <file>
    

  • [ 将文件恢复到修改之前的样子 ]
    • 这个操作需要慎重,git会用最近一次提交的文件状态覆盖掉当前文件
    • 如果有想保留当前状态,又想将文件恢复到上次提交的状态,建议通过分支来处理
      git checkout -- <file>
    

  • [ 远程仓库 ]
  • [ 查看已经配置的远程仓库 ]
  •   git remote -v
    

  • [ 添加远程仓库 ]
  •   git remote add <name> <url>
    

  • [ 拉取远程仓库 ]
  •   git fetch <remote_name or url>
    
    • fetch 命令只会拉去,并不会合并

  • [ 推送到远程仓库 ]
  •   git push <remote_name or url>
    

  • [ 查看某个远程仓库 ]
  •   git remote show <remote_name or url>
    

  • [ 远程仓库重命名与移除 ]
  •   git remote rename <old> <new>
      git remote remove <remote_name>
    

  • [ 标签功能 ]
  • [ 列出已有标签 ]
  •   git tag
    

  • [ 创建附注标签 ]
    • 如果没有添加-m,git会启动编辑器要求输入信息
      git -tag -a v1.0 -m "version 1.0"
    
    • 查看标签信息与对应的提交信息
      git show v1.0
    

  • [ 创建轻量标签 ]
    • 创建轻量标签不需要 -a -m 或 -s 选项,提供标签名即可
    • git show 轻量标签时,只会显示提交信息
      git tag v1.1-lw
    

  • [ 给已经提交过的更新打标签 ]
    • 查看提交记录
      git log --pretty=online
    
    • 给指定记录打标签时,需要携带全部校验码或者从头开始的部分校验码
      git tag -a v1.2 <code> -m 'version 1.2'
    

  • [ 推送标签到远程仓库 ]
    • 默认情况下,git push 命令不会推送标签
    • 一下命令会将远程仓库上没有的标签推送到远程仓库
      git push <remote_name> --tags
    

  • [ 删除标签 ]
    • 删除本地标签
    • 该命令不会删除远程仓库中的标签
      git tag -d <tag_name>
    
    • 删除远程仓库标签
      git push <remote_name> --delete <tag_name>
    

  • [ 别名 ]
  •   git config --global alias.<name> '<command>'
      git config --global alias.cm 'commit -a -m'
      git config --global alias.unstage 'reset HEAD --'
      git config --global last.unstage 'log -l HEAD'
    

  • [ 分支 branch ]
  • [ 查看分支列表 ]
  •   git branch
    
    • 查看每一个分支的最后一次提交情况
      git branch -v
    
    • 查看已经合并到当前分支的分支
      git branch --merged
    
    • 查看没有合并到当前分支的分支
      git branch --no-merged
    

  • [ 创建分支 ]
  •   git branch <b_name>
    
    • 可以使用 git log 查看 HEAD 指针指向的分支,也就是当前分支是哪个

  • [ 切换分支 ]
  •   git checkout <b_name>
    

  • [ 创建并切换到该分支 ]
  •   git checkout -b <b_name>
    

  • [ 合并分支 ]
    • 将某个分支合并到当前分支,然后删除该分支
      git checkout master
      git merge <b_name>
      git branch -d <b_name>
    
    • 合并分支可能会产生冲突,需要手动处理这些冲突,通过 git status 命令可以查看到 Unmerged paths
    • 可以在编辑器中直接修改冲突,也可以启动一个可视化工具来一步步解决冲突
      git mergetool
    

  • [ 变基 rebase ]
    • 这是 合并分支的另一种方式
    • merge 合并是将两个分支的共同最近祖先快照和二者各自的最新快照进行一个三方合并形成一个新的快照并将HEAD指针指向该快照。
    • rebase 合并方式是将被合并分支的状态改变在被合并到的分支上播放执行一遍,这样在merge合并之后,就不会有这个过程分支的记录存在。之后查看提交历史的时候,整个提交过程就是串行的,不会存在并行过程。
    • rebase 会让开发过程扁的整洁,但如果是多人开发,别人在自己分支的基础上进行了编辑,那边不要通过 rebase 的方式进行合并,这会导致他人的历史空白。
      git checkout <b_name>
      git rebase master
      git checkout master
      git merge <b_name>
    

  • [ 删除分支 ]
  •   git branch -d <b_name>
    
    • 如果该分支没有被合并到其他分支,删除时会提醒报错
    • 如果要丢弃分支中的状态改变并强行删除分支,使用 -D 选项
      git branch -D <b_name>
    

  • [ 远程分支 ]
  • [ 获取远程分支信息 ]
    • 显示的获取远程引用的完整列表
      git ls-remote <remote_name>
    
    • 获得远程分支的更多信息
      git remote show <remote_name>
    

  • [ 跟踪分支 ]
    • 远程分支和本地分支都比较容易理解,跟踪分支是与远程分支有直接关系的本地分支。表示格式为 <remote_name>/<b_name>,比如team/develop
    • 当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master 的 master 分支。
    • 设置其他跟踪分支,以下命令会创建一个本地分支并拉去远程分支到该分支,同时建立一个跟踪分支。
    • 这里的两个 b_name 可以不同,意味着相互关联的本地分支和远程分支可以名称不同。
      git checkout -b <b_name> <remote_name>/<b_name>
    
    • 如果有远程分支b, 没有本地分支b,则以上命令可以简写为
      git checkout b
    
    • 查看所有跟踪分支
      git branch -vv
    

  • [ 推送分支到远程分支 ]
    • 将 b分支 推送到远程仓库的 n分支 上
      git push <remote_name> <b_name>:<n_name>
    
    • 如果分支名称相同,可以简写
      git push <remote_name> <b_name>
    
    • 如果要将当前分支推送到origin远程仓库同名分支,可以简写
      git push
    

  • [ 拉取远程分支 ]
    • fetch 命令会拉取本地不存在的文件到本地
      git fetch --all
    
    • fetch 只会拉去文件到跟踪分支当中,并不会与本地分支进行合并
    • 通过 merge 命令,可以将跟踪分支合并到本地分支当中。

  • [ 删除远程分支 ]
  •   git push <remote_name> --delete <b_name>
    

  • [ 通信协议 ]
    • git 支持 local,http,ssh,git 四种协议
    • 其中http协议有智能协议和哑协议两种,前者支持拉去和推送,通过用户名和密码进行身份验证,极大的简化了访问过程。

  • 官方文档
  • posted @ 2024-08-17 10:32  anch  阅读(34)  评论(0)    收藏  举报