Git
关于Git的一些总结, 持续更新中……
git 配置
配置Git
# 配置全局用户
$ git config --global user.name "用户名"
$ git config --global user.email "git账号"
# 删除全局配置
$ git config --global --unset alias.xxx
$ git config --global --unset user.xxx
查看Git
# 查看系统配置
$ git config --list
# 查看用户配置
$ cat ~/.gitconfig
# 查看当前项目的 git 配置
$ cat .git/config
# 查看本地 git 命令历史
$ git reflog
# git 中 D 向下翻一行 F 向下翻页 B 向上翻页 Q 退出
git 常用命令
Git 常用命令
# 查看工作区和暂存区的状态
$ git status
# 将工作区的文件提交到暂存区
$ git add fileName OR git add *
# 提交到本地仓库
$ git commit -m "本次提交说明"
# 将本地分支和远程分支进行关联
$ git push -u origin branchName
# 将本地仓库的文件推送到远程分支
$ git push
# 拉取远程分支的代码
$ git pull origin branchName
# 合并分支
$ git merge branchName
# 查看本地拥有哪些分支
$ git branch
# 查看所有分支(包括远程分支和本地分支)
$ git branch -a
# 切换分支
$ git checkout branchName
# 临时将工作区文件的修改保存至堆栈中
$ git stash
# 将之前保存至堆栈中的文件取出来
$ git stash pop
# 分支创建同步
$ git push --set-upstream origin branch_name
# 远程创建 与 本地对着
$ git checkout --track origin/branch_name
$ git checkout --track origin/20200710-pre
# 创建本地分支 并切换
$ git checkout -b branch__name
# 提交本地分支到远程分支上
$ git push origin branch__name
--soft 参数用于回退到某个版本
git reset --soft HEAD
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
git reset --hard HEAD
$ git reset –hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某 个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
Pull Request(PR)操作
PR(Pull Request)通常是指:从自己的功能分支向
main/master发起合并请求。
# 1. 从主分支拉取最新代码
$ git checkout main
$ git pull origin main
# 2. 创建功能分支并开发
$ git checkout -b feat/login
# 3. 提交代码
$ git add .
$ git commit -m "feat: 登录功能优化"
# 4. 推送到远程分支
$ git push -u origin feat/login
# 5. 到 Gitee / GitHub 页面发起 PR
# 源分支:feat/login
# 目标分支:main
# 6. 如果 PR 期间主分支有更新,先同步主分支再继续提交
$ git fetch origin
$ git rebase origin/main
# 7. rebase 完成后,因为提交记录变了,需要强制推送
$ git push --force-with-lease
# 8. PR 合并后,删除本地分支
$ git branch -d feat/login
# 9. 删除远程分支
$ git push origin --delete feat/login
PR 常见建议
- 开发新功能时,不要直接在
main/master上改代码,先切功能分支 - PR 前先同步目标分支,减少冲突
- 如果已经发起 PR,又同步了主分支并做了
rebase,推送时使用git push --force-with-lease --force-with-lease比--force更安全,推荐优先使用
Tag 操作
Tag 常用于版本发布,比如
v1.0.0、v1.2.3。
# 查看所有 tag
$ git tag
# 查看 tag 详情
$ git show v1.0.0
# 创建轻量 tag
$ git tag v1.0.0
# 创建附注 tag(推荐,用于正式发布)
$ git tag -a v1.0.0 -m "release: v1.0.0"
# 给指定提交打 tag
$ git tag -a v1.0.0 commitId -m "release: v1.0.0"
# 推送单个 tag
$ git push origin v1.0.0
# 推送全部 tag
$ git push origin --tags
# 删除本地 tag
$ git tag -d v1.0.0
# 删除远程 tag
$ git push origin :refs/tags/v1.0.0
# 基于某个 tag 检出代码(此时通常是 detached HEAD 状态)
$ git checkout v1.0.0
# 基于 tag 新建分支
$ git checkout -b hotfix/v1.0.1 v1.0.0
Tag 使用建议
- 正式版本发布建议使用附注 tag:
git tag -a - 打完 tag 后,记得执行
git push origin --tags,否则远程仓库看不到 - 如果 tag 已经推送到远程,删除时要同时删本地和远程
git rebase
git rebase用来“变基”,可以把当前分支的提交,重新接到目标分支的最新提交之后,让提交记录更线性。
# 先拉取远程最新代码
$ git fetch origin
# 切到自己的功能分支
$ git checkout feat/login
# 将当前分支变基到最新 main
$ git rebase origin/main
rebase 解决冲突
# 发生冲突后,先手动修改冲突文件
# 标记冲突已解决
$ git add .
# 继续 rebase
$ git rebase --continue
# 如果想放弃本次 rebase
$ git rebase --abort
# 跳过当前冲突提交(不常用)
$ git rebase --skip
交互式 rebase
# 合并最近 3 次提交
$ git rebase -i HEAD~3
常见指令:
pick:保留该提交reword:保留提交,但修改 commit messagesquash:将该提交合并到上一个提交,并合并提交说明fixup:将该提交合并到上一个提交,丢弃当前提交说明drop:删除该提交
rebase 注意事项
rebase会改写提交历史- 已经推送给别人共同开发的公共分支,尽量不要随意
rebase - 自己的功能分支在合并前使用
rebase很常见,可以让提交记录更整洁 rebase后再次推送,通常需要:git push --force-with-lease