Skip to content

Git常用命令

2024-08-19

一、环境搭建

1、安装

https://git-scm.com/downloads

2、git公钥私钥生成

bash
# 配置用户名、邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

ssh-keygen
ssh-keygen -t rsa -C whatever@baidu.com
# 使用rsa加密 默认使用dsa加密
# 命令行中弹出输密码行,如果输入了,以后每次推拉代码都需输密码

3、git公钥配置

bash
# 查看公钥,并将其放置代码仓库之下,以使用ssh服务
cat ~/.ssh/id_rsa.pub

二、拉取代码

1、初次克隆代码(默认master分支)

bash
# 获取远程仓库代码
git clone git@github.com:vuejs/vue.git     

# 如果没有设置公钥可使用https协议,ssh有两个优点:
# 1、速率快,因为经过压缩;
# 2、配置无需每次输入账号密码;

2、切换分支

bash
# 查看本地分支
# 查看本地所有分支
git branch     

# 新建本地Dev分支并切换
git checkout -b dev    

# 等价于上面的命令
git branch dev && git checkout dev 

# 强行删除一个本地分支
git branch -D dev     

# 分支重命名,把原来的main改成master
git branch -m main master

3、拉远程Dev分支代码

bash
# 查看各个分支最后一次提交
git branch -v    

# 查看远程所有分支
git branch -r    

# 拉取远程dev分支,并在本地建立dev分支与之对应;
git checkout -b dev origin/dev    

# 同步远程当前分支代码
git pull    

# git默认把远程称为origin
git pull origin dev    

# 将远程的提交置于本地之前,rebase
git pull --rebase              

# 等价于上面的命令
git fetch dev && git merge      #等价于上面的命令

4、rebase(变基)

bash
# 假设你开发时是E,当在本地做了开发a,b,c;远程有同事开发的F和G已经合入,可以使用这个命令
git rebase master

# 如果有冲突,解决冲突,然后
git rebase --continue
# 或者放弃rebase
git rebase --abort

# rebase可以保证分支是一条直线,而非形成复杂的电路板状况

三、文件状态

1、文件状态的生命周期

file-lifecycle

2、 四种状态,3个流程

Untracked(未跟踪) 、 Unmodified(未修改)、 Modified(已修改) 、Staged(暂存区)
file-status

1. Untracked(未跟踪)    git add >  Staged(暂存区)    git commit >   Unmodified(未修改)
2. Modified(已修改)   git add >  Staged(暂存区)    git commit >   Unmodified(未修改)
3. Staged(暂存区)   git reset > Modified(已修改)

3、文件状态

bash
git status
git status -s                   # short版本
git diff --staged               # 查看你下次将要提交的staged文件
git diff --cache                # 展示文件文件差异,同--staged

4、文件日志

bash
# 展示最近两次提交的diff
git log -p/--patch -2 

# 展示每次commit的简短stat
git log --stat 
git log --pretty=oneline
git log --pretty=short
git log --pretty=full
git log --pretty=fuller
git log --pretty=fomat:"%h - %an, %ar : %s"
git log --graph

四、提交代码

1、基础提交

bash
# 添加文件
git add filename    

# 添加所有文件到staged,包含删除、新增、修改
git add .           

# 提交代码到本地仓库
git commit -m "feat:remark"      

# 提交代码至远程分支
git push origin dev:dev    

# 可以使用vim修改git忽略文件
vim .ignore    
vim .gitignore

# 回滚某个文件,不让他在暂存区
git restore --staged .env.dev

前端里面Husky可以做为git提前的hook,进行预执行,从而做git提前的代码风格扫描,提交的message校验; https://typicode.github.io/husky/#/?id=test-hooks

2、本地项目提交

bash
# 初始化为本地仓库
git init       

# 关联一个远程仓库
git remote add origin git@server-name:path/repo-name.git        

# 第一次提交,-u指定一个个默认主机,后面提交不用指定origin master
git push -u origin master

3、stash(暂存代码)

bash
# 储藏目前的进度,进行其他分支开发
git stash               

# 列出Stash栈
git stash list       

# 恢复但不删除stash
git stash apply        

# 恢复并删除stash
git stash pop

4、reset

bash
# 回归到某次提交,慎用,能不用就不要用,因为--hard会丢失修改的内容,
git reset --hard 9c75503273c1375c7226a13ef6069c554644735c

# 回滚到某个节点,并保留节点后续的修改
git reset --soft 9c75503273c1375c7226a13ef6069c554644735c

# 撤销上一次commit
git reset HEAD~

5、cherry-pick

bash
# 合并某个分支上的某一次提交
git cherry-pick e406c36

6、提交查看

bash
# 查看commitId
git reflog 

# checkout一次提交,舍弃某个文件的修改
git checkout e406c36    

# 还原到最新提交,即dev指针的位置
git checkout dev

五、Tag管理

1、tag管理

bash
# 新建一个标签
git tag <tagname>                       

# 新建标签并注释
git tag -a <tagname> -m "commit"          

# 查看所有标签
git tag                                     

# 推送一个本地标签
git push origin <tagname>                   

# 推送全部本地标签
git push origin --tags                      

# 删除一个本地标签
git tag -d <tagname>                        

# 删除一个远程标签
git push origin :refs/tags/<tagname>

六、分支开发规范

git-norm

  • 1、开发在dev分支上,代表一次迭代,一个代码库至少含有两条分支: dev和master;
  • 2、多个迭代并发时,可以创建多个dev-xxx,如:dev-map,dev-3d;
  • 3、master不要推代码,只用来上线打tag,每次上线完成后需要及时打tag,便于回滚,tag的格式是 release_date_version, 如release_20230327_v4.1;
  • 4、提交代码一定要写message:message一定要带上前缀,前缀是其中的一种: git-msg-type

如: git commit -m 'feat: 完成登录注册功能'

  • 5、非特殊情况,提交不能直接合入,需要设置一个同伴打分,认真做好 code review。

花海相伴