1. GIT基础
1.1 认识git
- Windows对想使用的版本控制的文件夹鼠标右键
git bush here 进入要管理的目录,mac不需要 - 基础知识教程指路,在此基础上补充了些其他常用的知识。
- 初始化
git init
- 检测到目录下文件的状态
git status
- 两种状态变化
-
红色:新增的文件/修改了原文件 git add filename
git add .
-
绿色: 管理git版本 git commit -m 'v1'
-
如果不想使用commit将代码放入本地仓库,那么可以使用 git stash 将修改的代码暂时存入缓存堆栈中(此命令适用于工作区和暂存区)
git add .
git stash 储藏修改的代码但是不commit
git pull 从云端拉取新项目
git stash pop 出栈覆盖到新项目
git stash list
git stash clear
git stash drop stash@{0}
- 查看日志
git log
git log --graph --pretty=format:"%h %s"
git reflog
-
git放弃更改,放弃增加文件方法 1.修改了一些文件 (并没有使用 git add 到暂存区),想放弃修改
- 单个文件/文件夹:
git checkout -- filename
- 所有文件/文件夹:
git checkout .
2.新增了一些文件,想放弃修改
- 单个文件/文件夹:
git rm -rf filename
(以下命令无法在执行git add后生效)
- 所有文件:
git clean -xdf
- 所有文件和文件夹:
git clean -xdff
3.修改/新增了一些文件,已经 git add 到暂存区,想放弃修改
(在git add执行后,执行以下两个命令,再使用git stash或者git commit,保存的就是未修改状态的文件)
- 单个文件/文件夹:
git reset HEAD filename
- 所有文件和文件夹:
git reset HEAD .
-
执行 git commit 后,想回滚版本
git log
git reset --hard commit_id
git reflog
git reset --hard commit_id
git reset --hard commit_id :撤销 commit,同时本地删除该 commit 修改,仍在工作区/暂存区的代码也将会清除
git reset commit_id:撤销 commit, 同时保留该 commit 修改,已经 commit 的修改还在工作区
- 新增一个文件
touch 文件名.文件格式
ls
cat filename
1.2 分支
git branch
git branch dev
git checkout dev
git checkout -b dev
git switch dev
git switch -c dev
git branch -d dev
git branch -D dev
git push origin -d dev
git branch -rd origin/dev
git fetch origin -p origin/dev
git rebase dev
git status
git add .
git commit -m '最新版本'
1.2.1 github连接
git remote add origin 地址
git branch -M main
git push -u origin main
git push -u origin dev
mkdir gitdemo
cd gitdemo
git clone 网址
git checkout 分支
1.查看本地已有的分支
git branch
2.本地检出一个新的分支并推送到远程仓库
git checkout -b dev(新分支名)
git push --set-upstream origin dev
3.将远程git仓库里的指定分支拉取到本地(本地不存在的分支)
git fetch
git checkout -b 本地分支名 origin/远程分支名
1.2.2 更新代码
git checkout master
git pull origin master
git checkout dev
git rebase master
git add .
git commit -m ''
git push origin dev
git pull origin master = git fetch origin master (将云端代码拉到版本库)+ git merge origin/master (将版本库加载到工作区)
git log
git rebase -i HEAD~4
git log
2. Github项目配置&管理
2.1 给开源项目提交代码
1.在别人的仓库上fork到自己的仓库
2.然后从自己的仓库使用git clone 到自己本地文件中开始修复bug或者添加新功能
3.上传,新建一个git commit -m '新版本'
4.git push
5.使用github上的New pull request
6.选择Create pull request填写版本描述等待作者审核
7.在github上在项目上提出一个issue来帮助开发者完善开源项目,Assignee用来指派给特定的用户
8.使用wiki建立项目规范,描述项目详情
2.2 其他
2.2.1 配置文件
-
项目配置文件:项目/.git/config git config --local user.name '姓名'
git config --local user.email 'xxx@xx.com'
-
全局配置文件:~/.gitconfig git config --global user.name '姓名'
git config --global user.email 'xxx@xx.com'
-
系统配置文件:/etc/.gitconfig git config --system user.name '姓名'
git config --system user.email 'xxx@xx.com'
注意:需要root权限
-
查看本地配置文件 vim .git/config
vim ~/.gitconfig
-
修改远程仓库登录地址
git remote -v
git remote add origin https://用户名:密码@github.com/ERRUI/gridea.git
git push -u origin master
2.2.2 SSH密钥配置
- 全局配置git信息
git config -g user.name "yourname"
git config -g user.email "youremail"
|—— /Users/errui/Code/Github
[includeIf "gitdir:Code/Github/"]
path = ./.github
[user]
name = username
email = email@example.com
- 生成密钥
mkdir -p ~/.ssh && cd ~/.ssh
ssh-keygen -t 算法类型 -b 密钥长度 -f 生成的密钥名(不可更改) -C "email@example.com"(在公钥生成的注释,可以更改)
eg.ssh-keygen -t rsa -b 4096 -f my_id -C "email@example.com"
推荐使用ed25519算法类型,相关科普说明链接:https://www.cnblogs.com/cure/p/15389876.html
ssh-keygen -t ed25519 -f github_ed25519 -C "email@example.com"
ssh-keygen -t ed25519 -f gitee_ed25519 -C "email@example.com"
ssh-keygen -t ed25519 -f company_ed25519 -C "email@example.com"
ssh-add ~/.ssh/company_ed25519
ssh-add ~/.ssh/github_ed25519
ssh-add ~/.ssh/gitee_ed25519
2.2.3 删除远端仓库中的文件或者文件夹
git rm -r -n --cached src/components/Test.vue
git rm -r --cached src/components/Test.vue
git commit -m 'Delete Test.vue'
git push origin master
2.2.4 撰写commit message 工具,规范commit提交质量
-
全局安装:npm install -g commitizen -
项目根目录上执行命令:commitizen init cz-conventional-changelog --yarn --dev --exact -
提交git时将git commit 命令改为git cz -
相关说明 feat: A new feature 一个新的功能
fix: A bug fix 一个bug修复
docs: Documentation only changes 只有文件的变化
style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) 不影响代码含义的变化
refactor: A code change that neither fixes a bug nor adds a feature 一个既没有修复错误也没有增加功能的代码修改
perf: A code change that improves performance 一个能提高性能的代码修改
test: Adding missing tests or correcting existing tests 增加缺失的测试或纠正现有的测试
build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm) 影响构建系统或外部依赖的变化
ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs) 对我们的CI配置文件和脚本的修改
chore: Other changes that don't modify src or test files 其他不修改src或测试文件的改动
revert: Reverts a previous commit 恢复先前的提交
ERRUI:转载请注明来源,如有错误欢迎在评论区友好指出,谢谢!
|