git实操
配置
- gitlab ssh key配置【如何同时使用多个SSH公钥】
- 保存密码,避免多次输入
- ssh-keygen -p
- Enter file in which the key is (/c/Users/xxx/.ssh/id_rsa): (选择公钥所在地)
- Enter old passphrase:(输入旧密码)
- 接着直接enter
命令
- checkout
-
git checkout -- <file>
恢复被修改的工作区文件到修改之前的状态(先从暂存区拉取,没有则到本地仓库拉取)git restore <file>
也是取消文件的修改
- reset
git reset HEAD -- <file>
移除索引区(暂存区)中指定的文件
分支
- 创建分支
- git branch
git checkout -b <branchName>
创建并切换分支
创建完成后,将本地分支push到远程git push origin <branchName>:<origin/branchName>
,创建同名远程分支
- 查看分支
git branch
查看所有本地分支git branch -a
查看所有分支
- 切换分支
git checkout <branchName>
- 删除分支
git branch -d <branchName>
删除本地分支,要求该分支所有提交已合并到HEAD提交;-D
强制删除本地分支git push origin :<branchName>
删除远程分支
- 合并分支(合并前需要先拉取远程master)
git merge <branchName>
保留分支上的提交记录,会创建一次新的commit
冲突解决后:git add 修改后的文件 -> git commit -m '注释'
对于快速合并,不会产生新的提交;--no-ff
指定不是快速合并,合并后产生一次提交记录。回到合并之前可以使用git reset --hard HEAD~
-
git rebase <branchName>
不保留分支提交记录从issue2分支
git resbase master
进行合并,解决冲突后:git add 修改后的文件 -> git rebase --continue -> vim编辑注释,:wq保存退出
==> Q: 什么时候使用merge?什么时候使用rebase?
- 重命名分支
git branch -m <branchName> <targetBranchName>
- 当远程某分支被删除后,本地仍可查看到该分支,如何更新?
git fetch -p
改写提交
commit --amend(修改最近一次的提交)
- 第一次提交
- git add 文件
- git commit -m '注释'
- 再次提交
- git add 修改后的文件
- git commit --amend,进入vim编辑,具体命令可以操作查看这篇文章
reset
模式 | HEAD位置(取消commit) | 索引(取消add) | 工作区 |
---|---|---|---|
hard | 修改 | 修改 | 修改 |
mixed | 修改 | 修改 | 不修改 |
soft | 修改(撤出提交的内容,commit仍存在) | 不修改 | 不修改 |
git reset --模式 版本号/HEAD~
返回指定版本git reset --模式 ORIG_HEAD
恢复到reset之前
rebase
- 汇合提交记录 合并前
git rebase -i HEAD~~
合并最近两次提交,合并后
- 修改提交记录 修改之前
git rebase -i HEAD~~
,选择需要修改的提交记录,将push
改为edit
,:wq保存退出。git add 修改文件
+git commit --amend
修改此次提交记录,git rebase --continue
通知变基结束。发生冲突,解决冲突后git add 解决冲突后的文件
+git rebase --continue
完成修改。
使用git rebase --abort
终止操作
fixup
当想对某次提交做补充且需要保持提交记录干净时,可使用 fixup 进行操作
git commit --fixup <targetSHA>
git rebase -i --autostash <targetSHA>
stash
- 切换分支报错:改动未提交,需要先执行
git add .
- 使用
git stash save 注释
暂存修改内容,git stash show
查看暂存内容,使用git stash list
查看stash记录
- 恢复可使用
git stash pop
或git stash apply
git stash pop
恢复暂存内容同时,删除记录git stash apply stash@{0}
恢复内容同时保留记录
移除staged文件
git restore --staged <file>
可取消指定的已add的文件git rm --cached <file>
移除指定的已add的文件,需要add的文件没有被修改,否则报错git reset HEAD <file>
在已commit时,取消commit,取消add,默认--mixed
gitlab工作流
- git clone url
- 修改/添加文件
- git add .
- git commit -m 'feat/fix/.. ...',参考 angular commit message
- 第一次
git push origin <branchName>:<remote branchName>
,后面push使用git push origin <branchName>
- 提MR(merge request),从
当前开发分支
到目标分支
- code review后,解决问题并
resolve discuss
- 完成编码后,等待approve和merge
changeset发包流程
- 每次分支工作完成,需要构建changeset,再把 changeset push上去
-
yarn changeset add
-
选择需要发版的包
-
确定修改版本号(major/minor/patch)
major: 主版本号,开发阶段为0 minor: 次版本号,开发阶段包有大更改则修改此版本号,稳定时 patch: 修改bug则修改此版本号
-
添加发包原因
- 发包前,
git pull
确保本地master分支为最新 - master分支上执行
yarn changeset version
,会有changeset删除和文件修改,需要确认修改(确定版本号) git add .
->git commit -m 'release'
->git push
- master分支上执行
yarn changeset publish
开始发包,完成后需要git push --follow-tags
打上tag
转载自:https://juejin.cn/post/6941962913166917669