Git命令 | 青训营笔记

89 阅读7分钟

git-command.jpg

基本概念

版本库👉.git

  • 当我们使用git管理文件时,比如git init时,这个时候,会多一个.git文件,我们把这个文件称之为版本库。
  • .git文件另外一个作用就是它在创建的时候,会自动创建master分支,并且将HEAD指针指向master分支。

工作区(Workspace)

  • 本地项目存放文件的位置
  • 平时进行开发改动的地方,是当前看到最新的内容,在开发的过程也就是对工作区的操作

暂存区(index)

  • 暂时存放文件的地方,可以通过add命令将工作区的文件添加到缓冲区
  • 暂存区标记了当前工作区中那些内容是被 Git 管理的

本地仓库(Repository)

  • 可以使用commit命令可以将暂存区的文件添加到本地仓库
  • HEAD指针指向的就是master分支

远程仓库(Remote)

  • 通常使用clone命令将远程仓库代码拷贝下来,本地代码更新后,通过push托送给远程仓库。

基本命令

Git文件状态

git status # 查看当前状态
  • Changes not staged for commit
    • 表示得大概就是工作区有该内容,但是缓存区没有,需要我们git add
  • Changes to be committed
    • 一般而言,这个时候,文件放在缓存区了,我们需要git commit
  • nothing to commit, working tree clean
    • 这个时候,我们将本地的代码推送到远端即可

Git配置命令

git config --list	        # 列出当前配置

git config --local --list   # 列出Repository配置

git config --global --list  # 列出全局配置

git config --system --list  # 列出系统配置

若通过上述的命令,发现并没有配置用户信息的话,接下来配置一下

git config --global user.name "your name"   # 配置用户名

git config --global user.email "youremail@github.com" # 配置用户邮箱

分支管理

git branch      # 查看本地分支

git branch -r   # 查看远程分支

git branch -a   # 查看所有分支

git checkout <branch-name>      # 从当前分支,切换到其他分支

git checkout -b <branch-name>   # 创建并切换到新分支

git branch -d <branch-name>     # 删除分支

git merge <branch-name>         # 当前分支与指定分支合并

git branch --merged        # 查看哪些分支已经合并到当前分支

git branch --no-merged    # 查看哪些分支没有合并到当前分支

git branch -v            # 查看各个分支最后一个提交对象的信息

git push origin -d <branch-name> # 删除远程分支

git branch -m <oldbranch-name> <newbranch-name> # 重命名分支

git checkout -b 本地分支名x origin/远程分支名x # 拉取远程分支并创建本地分支
// 另外一种方式,也可以完成这个操作。
git fetch origin <branch-name>:<local-branch-name>

fetch指令

用于从远程获取代码库。与git pull不同的是git fetch操作仅仅只会拉取远程的更改,不会自动进行merge操作。

git fetch origin <branch-name>:<local-branch-name>
  • 一般而言,这个origin是远程主机名,一般默认就是origin。
  • branch-name 你要拉取的分支
  • local-branch-name 通常而言,就是你本地新建一个新分支,将origin下的某个分支代码下载到本地分支。
git fetch <远程主机名>  # 将某个远程主机的更新,全部取回本地。(取回的是所有的分支更新)

git fetch <远程主机名> <分支名> # 想取回特定分支,可以指定分支名

git fetch origin :<local-branch-name> # 想将某个分支的内容取回到本地下某个分支的话
// 等价于👇
git fetch origin master:<local-branch-name>

撤销

git checkout -- <file> # 撤销工作区的修改

git reset HEAD <file>  # 暂存区文件撤销 (不覆盖工作区)

git reset --(soft | mixed | hard ) < HEAD ~(num) > | <commit-id> # 撤销本地提交
指令作用范围
--hard回退全部,包括HEAD,index,working tree
--mixed回退部分,包括HEAD,index
--soft只回退HEAD

状态查询

git status -s # 简短的状态查询

git reflog  # 查看所有分支的所有操作记录

git log     # 查看当前分支的操作记录

git blame <file> - 以列表形式查看指定文件的历史修改记录。

文档查询

git help (--help)   # 展示Git命令大纲

git help -a         # 展示Git命令大纲全部列表

git help            # 展示具体命令说明手册  

文件暂存

保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。

git stash save -a “message” # 添加改动到stash

git stash drop <stash@{ID}> # 删除暂存

git stash list # 查看暂存列表

git stash clear # 删除全部缓存

git stash pop <stash@{ID}> # 恢复改动并删除stash

差异比较

git diff <file> # 比较工作区和暂存区的差异

git diff -- cached <file> # 比较暂存区和本地库的差异、

git diff HEAD <file> # 比较工作区和本地库的差异

git diff <commit-id> <file> # 比较工作区和指定版本的差异

分支命名

master分支

  • 主分支,用于部署生产环境的分支,确保稳定性。
  • 主分支,用于部署生产环境的分支,确保稳定性。

develop 分支

  • develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码。
  • 开发新功能时,feature分支都是基于develop分支下创建的。

feature分支

  • 开发新功能,基本上以develop为基础创建feature分支。
  • 分支命名:feature/ 开头的为特性分支, 命名规则: feature/user_module、 feature/cart_module。

release分支

  • release 为预上线分支,发布提测阶段,会release分支代码为基准提测。

hotfix分支

  • 分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。
  • 线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。

整体流程

  1. 创建本地仓库 git init

git init

  1. 链接本地仓库与远端仓库

git remote add origin origin默认是远端仓库别名 url 可以是可以使用https或者ssh的方式新建

  1. 检查配置信息

git config --list

  1. Git user name 与email

git config --global user.name "yourname" git config --global user.email "your_email"

  1. 生成SSH密钥

ssh-keygen -t rsa -C "这里换上你的邮箱" cd ~/.ssh 里面有一个文件名为id_rsa.pub,把里面的内容复制到git库的我的SSHKEYs中

  1. 常看远端仓库信息

git remote -v

  1. 远端仓库重新命名

git remote rename old new

  1. 提交到缓存区

git add . #全部上传到缓存区 git add xxx # 添加某个文件到暂存区,后面可以跟多个文件,以空格区分

  1. 提交到本地仓库

git commit -m 'some message' git commit -am # 等同于 git add . && git commit -m git commit --amend # 对最近一次的提交的信息进行修改,此操作会修改commit的hash值

  1. 提交远程仓库

git push <远程主机名> <本地分支名>:<远程分支名>

  1. 查看分支

git branch

  1. 创建新分支

git branch

  1. 切换分支

git checkout

  1. 创建分支并切换

git checkout -b

  1. 删除分支

git branch -d

  1. 删除远程分支

git push -d

  1. 合并分支

git pull <远程主机名> <远程分支名>:<本地分支名> # 从远程仓库拉取代码并合并到本地,可简写为 git pull 等同于 git fetch && git merge git pull --rebase <远程主机名> <远程分支名>:<本地分支名> # 使用rebase的模式进行合并

上传

…or create a new repository on the command line

echo "# hello_tf" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://XXXX@github.com/XXXXXX/hello_tf.git
git push -u origin main

…or push an existing repository from the command line

git add README.md
git commit -m "first commit"
git branch -M main
git push -u origin main

忽略文件 .gitignore

这个文件的作用,会去忽略一些不需要纳入Git管理这种,我们也不希望出现在未跟踪文件列表。

# 此行为注释 会被Git忽略

# 忽略 node_modules/ 目录下所有的文件
node_modules

# 忽略所有.vscode结尾的文件
.vscode

# 忽略所有.md结尾的文件
*.md

# 但README.md 除外
!README.md

# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt

# 忽略 doc/ 目录下所有扩展名为txt文件

doc/**/*.txt

参考