46-git-41-实用场景

概述

一些工作中会用到的知识点

正常操作流程

git add .
git commit -m "提交描述"
git pull
git push

上述操作流程是经常会使用的操作,为什么pull之前要先提交commit?

分两步理解

第一步是git add & git commit,这是你本地仓库的操作记录

第二步是git pull & git push,这是本地仓库和远程仓库的交互与同步。

假如你本地没有修改文件,可以直接进行第二步,随时和远程仓库进行同步。

假如你本地有修改文件,需要先将本地代码保存起来,做一次提交,这样在和远程交互的时候,才能对比操作。

否则本地修改文件会被覆盖丢失。

合并代码

当开发完成一个迭代后,需要发布上线,此时需要将dev分支的代码合并到master

git switch master
git pull origin dev
git push

暂存代码

当你需要去合并分支的时候,假如你dev分支上有未完成的工作,此时是不能切换分支的。

但是因为工作还没有完成,你不想提交到远程,那么就可以将代码先暂存起来。

git stash

git switch master
git pull origin dev
git push

git switch dev
git stash pop

修复线上bug

此时已经发布上线了,但是发现线上有一个bug需要紧急处理,应该怎么做?

// 从master分支检出bugfix分支
git switch master
git switch -c bugfix
// 修复bug,提交到仓库
git add .
git commit -m 'fix bug x'
// 切换到master,合并bugfix分支并删除
git switch master
git merge --no-ff -m "merged bugfix x" bugfix
git branch -d fixbug

假如你没有检出bug分支,直接在dev分支上开发的

// 修复bug,提交到仓库
git add .
git commit -m 'fix bug x'
// 拉取远程更新,并推送
git pull --rebase
git push
// 此时发现另外一名同事已经提交了一些东西,但是这些没经过验证不可以发到线上
// 查看提交记录,记录下你刚刚提交的commitId,假设为c0
git log --oneline
// 切换到master
git cherry-pick [刚刚提交的commitID]
git cherry-pick c0
// 提交
git pull
git push

版本回退

// 查看提交记录
git log --oneline
// 以上次提交举例HEAD~,实际以具体commitID
git reset --hard [commitid]
git reset --hard HEAD~
// 强行推送到远程
git push -f

切换工作区内容

git show-branch
// 指定快照
git restore --source [commitID] .
// 工作区切换到最新提交
git restore --source HEAD .

清空工作区内容

git restore --staged --worktree .

git命令行反应慢

1、删除本地无用的分支

2、使用git log时,不要加--graph参数

调试某个功能并推送到dev环境

平时可能会遇到一些功能,在本地修改完成后,推送到dev环境去看效果,但是因为是调试,可能需要调试很多次,但是实际上并不应该推送很多无意义的提交。

使用--amend撤销上次提交并推送本次提交,然后强制推送到远程

git add .
git commit --amend -m "debug"
git push --force-with-lease

拷贝某次提交

你可能在本地新开了一个分支,做了一些实验性的东西,尝试解决某个需求,并且提交到了本地,这时有一个东西要修改,你忘记了当前是新开的test分支,而不是dev分支,直到修改完并提交成功才意识到提交错了分支。

git switch dev
git cherry-pick test
git pull
git push

对比差异

查看工作区与暂存区的差异

git diff

查看工作区与上一次commit之间的差异

git diff HEAD

查看暂存区与当前 commit 的差异

git diff --cached

对比当前提交和上次提交

git diff HEAD HEAD~

对比具体文件file.txt

git diff file.txt

对比分支

git diff master dev

撤销某次提交

git revert <commitID>

当执行完git revert <commitID>,会出现vim编辑器页面,按:q退出编辑,然后提交该commit

打标签

新增标签

git tag v1

推送标签

git push origin --tags

定位bug

# 开始定位
git bisect start HEAD 4d83cf
# 功能正常
git bisect good
# 功能不正常
git bisect bad
# 退出定位
git bisect reset

删除分支

删除本地分支

git branch -d [branch-name]

删除远程分支

git push origin --delete dev