git的原理和基本概念
- GIT仓库的管理完全依靠隐藏在目录下的.git目录。如果没有这个目录,是万事不行的。这个目录中存入了操作以及文档的快照内容(注:快照和索引在这里是一个东西,因为很多文档上是以索引来命名的)。GIT就是基于文档的快照对文档进行追踪和管理,从而实现对版本的控制。
- GIT由三部分组成,工作目录(就是我们本地的目录)、快照内容(就是.git目录)、仓库(英文是repository),修改本地目录后,通过git add 添加修改至快照中,然后通过git commit命令将快照提交至仓库中。
git配置
下载: git-scm.com/downloads, gitforwindows.org/
git --version
初始配置:
git config --global user.email "youremail@example.com"
git config --global user.name "youremail@example.com"
ssh公钥认证:
使用 ssh 连接 Github 发送指令更加安全可靠,也可以免掉每次输入密码的困扰。
在命令行中输入以下代码(windows 用户使用 Git Bash)
ssh-keygen -t rsa
一直按回车键直到结束。系统会在~/.ssh 目录中生成 id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub。
向 GitHub 添加秘钥
github => setting => new SSH key , 添加上面生成的 id_rsa.pub 公钥内容
.gitignore
.gitignore 用于定义忽略提交的文件
- 所有空行或者以注释符号
#开头的行都会被 Git 忽略。 - 匹配模式最后跟反斜杠(
/)说明要忽略的是目录。 - 可以使用标准的 glob 模式匹配。
git工具
学习工具:learngitbranching.js.org/?locale=zh_…
vscode插件:GitLens - Git supercharged
使用工具:sourceTree
git fork流程
-
fork项目:在github页面上, 点击fork按钮, 将B的项目拷贝一份到A自己的代码仓库中.
-
clone项目,并添加远程项目路径
git remote -v:主仓库(upstream)和你的远程仓库(B) 否则: git remote add B 你的仓库地址 或者 git remote add upstream 远程仓库地址 -
每次更新代码前,拉取B最新的代码,合并到A自己的repo中
git pull upstream 远程分支 git push B 本地分支 -
在本地更改、提交代码(增删查等操作)
git add git commit -m'' -
将代码推送到B的github仓库.
git push B 本地分支 git pull upstream 远程分支 git push B 本地分支 -
merger request: 在github页面上,点击merge request
git分支管理
- master分支:用于版本的更新,当比较大的功能开发完成或者更新之后会有一次集体的发版,就会将所有的代码都合到master(有的公司也会用release分支发版,原理都是一样);
- dev分支:一般是开发测试分支,在项目发版上线之前都会现在dev分支上统一进行测试,确保功能达标没有bug之后再推到master分支;
- feature分支:用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 dev 分支;
- hotfix分支:是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。当线上某个版本出现了问题,将检出对应版本的代码,创建 Hotfix 分支,问题修复后,合并回 dev和master ,这里注意,合并到 master 的时候,一般要打上修复后的版本标签。
Commit Message
feat: 新功能feature
fix: 修补bug
我的git常用命令
克隆项目:git clone url
克隆项目指定分支:git clone -b dev http://192.168.129.110/psae/PSAEFrontend.
添加远程库:
git remote -v
git remote add yxq http://192.168.129.110/psae/PSAEFrontend.
拉取分支:
git checkout -b temp origin/PSAE-6.2
git checkout --track origin/PSAE-6.1.3
删除分支:git branch -D dev
暂存本地文件:git stash
可以将某一分支的某次提交合并到另一分支上。
git cherry-pick head.....
拉取代码:
git pull origin master
暂存代码:
git add .
git commit -m'名称';
合并commit:
git commit --amend
git rebase -i HEAD~4 合并前四个commit记录
提交代码:
git push yxq temp (temp =>temp)
Tag标签:
git tag
要在tag代码的基础上做修改:
git checkout -b branch_name tag_name
统计代码
git log --author=yixiaoqing --since=2023-01-01 --until=2023-12-31 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "Added lines: %s\nDeleted lines: %s\nTotal lines: %s\n", add, subs, loc }'
git log --since=2023-01-01 --until=2023-12-31 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "Added lines: %s\nDeleted lines: %s\nTotal lines: %s\n", add, subs, loc }'
其他:
git fetch origin
git reset --hard
git push origin :foo 删除远程分支
git fetch origin :bar
git log
git diff
git clean
get merge origin/dev 合并远程分支
设置默认的远程分支,即push时使用的默认分支 git push --set-upstream origin dev
打包压缩:git archive --format zip --output hdcms.zip master