Git常用操作总结

0 阅读4分钟

一、git的基本概念

本地git包括三个目录:

  • 工作目录:对应文件的“已修改”状态,表示修改了某个文件,但没有提交保存(没有add)
  • 暂存目录:对应文件的“已暂存”状态,表示文件已经提交保存,等待下次提交(已经add,但没有commit)
  • git目录:对应文件的“已提交”状态,表示文件已经提交到本地仓库中(已经commit)

二、git常用命令

1、查看状态

git status #查看状态:现在有改动、所在分支等状态

git diff #修改信息

git log --oneline --graph --decorate --all #提交历史
#--oneline :单行显示提交
#--graph :显示提交图结构
#--decorate :显示分支和标签
#--all :显示所有分支

2、从远端拉代码与同步更新

git clone <repo_url> #把仓库拉到本地

git fetch <远程主机名> <远程分支名>:<本地分支名> #从远程仓库获取最新提交记录

git pull <远程主机名> <远程分支名>:<本地分支名> #直接git pull会默认拉取main分支
#git fetch 是下载远程更新,但不改变当前代码
#git pull相当于fetch + merge,会修改工作区

需要注意的是,git fetch不能作用于当前的本地分支,例如在main分支执行git fetch origin main:main,会出现git refusing to fetch into current branch报错。

3、提交代码

git add <file> # 或 git add .   把改动加入暂存区, add . 表示把所有改动都加入暂存区

git commit -m "feat: xxx" #将暂存区内容添加到本地仓库,-m 用于添加commit信息,这是必须选项

git push <远程主机名> <本地分支名> #将本地commit发布到远程仓库,推送到的远程仓库中的分支名称和本地分支一致,如果没有,远程会自动创建该分支

git push后可添加 -u 选项,即git push -u <远程主机名> <本地分支名>,常用于第一次推送分支,-u 的作用是设置 upstream(上游分支),执行后可建立本地分支和远程分支的追踪关系,以后再提交,直接git push即可

4、分支操作

git branch # 列出所有本地分支 
 
git branch -r # 列出所有远程分支

git branch [branch-name] # 新建一个分支,但依然停留在当前分支 
 
git checkout -b [branch] # 新建一个分支,并切换到该分支

git checkout [branch] #切换分支

5、合并代码

git merge <branch>  #将<branch>分支合并到当前分支
git rebase <branch> #将当前分支的提交移动到 <branch> 最新提交之后

merge相关参数:

  • –ff 或 –no-ff选项
    • 默认情况下,git执行“快进式合并”(fast-farward merge),不会创造一个新的commit节点;
    • –no-ff,会创建一个新的commit;
  • –squash
    • 不保留待合并分支上的历史信息,也不提交、不移动HEAD,需要一个额外的commit命令;
    • 判断是否使用–squash选项的最根本的标准是,待合并分支上的历史是否有意义;
  • –abort
    • 抛弃当前合并冲突的处理过程并尝试重建合并前的状态;

6、撤销

git checkout [file] # 恢复暂存区的指定文件到工作区

git checkout . # 恢复暂存区的所有文件到工作区

git reset --hard # 重置暂存区与工作区,与上一次commit保持一致

git reset [commit] 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

三、git工作流程规范

参考:git分支管理和工作流规范:具体规范

项目开发常见的分支安排如下:

master分支

主分支,与线上运行的版本始终保持一致,任何时候都不要直接修改master分支。

一个版本的release分支、hotfix分支开发完成后,会合并代码到master分支,也就是说master分支主要来源于release分支和hotfix分支。

develop分支

开发分支,始终保持最新完成以及bug修复后的代码,新增功能时基于该分支创建feature分支。

一个版本的release分支、hotfix分支开发完成后,也会合并到develop分支,另外,一个版本的feature功能开发完成后,也会合并到develop分支。也就是说develop分支来源于feature、release、hotfix分支。

feature分支

开发新功能或优化现有功能时,会创建feature分支,以develop为基础创建。一般会有多个功能同时开发,但上线时间可能不同,在适当的时候将特定的feature分支合并到develop分支,并创建release分支,进入测试状态。

release分支

当一组feature开发完成,会首先合并到develop分支,开始进入提测阶段时,会创建release分支。

以release分支代码为基准提测,测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交。

测试完成之后,合并release分支到master和develop分支,此时master为最新代码,用作上线。

hotfix分支

线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。