概述
一些工作中会用到的知识点
正常操作流程
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