文章主要解释说明git
相关的进阶功能,包含暂存、分支、合并、回滚等。这些命令是我们日常工作中分支管理、代码管理的重要手段,基本通过这些命令可以解决在开发中遇到的代码冲突、冲突解决、代码回退、紧急 bug
修复等。
git stash
stash 命令不是很常用,在工作中一般遇到紧急问题,我们会暂存一下代码,由于暂存的代码容易和本地代码冲突导致无法强制使用暂存区代码,这是暂存的一个缺陷。当然在我们日常工作中,在暂存状态下尽量不要频繁暂存,容易造成一些问题。下面主要介绍暂存、暂存的取出、暂存的查看、暂存的删除、以及暂存树的调出等。git stash --help
查看相关参数
git stash # 中断,保持现场。(用编号标记不同的中断)
git stash list # 查看所有的中断信息
git stash clear # 清除所有中断信息
git stash save <message> # message 备注信息
git stash show [-p] #
git stash show stash@{num} # 查看 stash 中的修改内容
git stash pop stash@{num} # 从 stash 中取出并删除 stash{num}, 默认是最后一条
git stash apply stash@{num} # 取出 stash{num}, 但不删除 stash, 默认是最后一条
git fsck [--lost-found] # 查看丢失的 stash
git branch
分支管理相关命令较多,在日常工作中操作也较为频繁,熟练掌握这些命令可以提高代码管理的效率,下面是分支操作的相关命令说明,包含分支的新建、切换、更名、查看等。使用 git branch --help
查看相关参数
# 新建分支
git branch <branch> # 创建一个名为 branchName 的分支
git checkout -b <branch> # 创建并切换分支
<branch> <remote/branch> # 以远程分支为基础,创建新的本地分支
<branch> <commitId> # 以某次提交创建新的分支
<branch> <tagName> # 以 tag 创建新的分支
git checkout --orphan <branch> # 新建纯净分支,不依赖任何分支
# 分支查看
git branch -l # 查看本地分支
-r # 列出所有分支
-a # 远程分支 + 本地分支
-v # 查看各分支最后一次提交的版本,[ feat/v6.7.16 8351a38 fix 修复分组bug ]
# 删除分支
git branch -d <branch> # 删除分支,未合并分支不能被删除
-D <branch> # 强制删除分支
# 切换分支
git checkout <branch> # 从当前分支切换到 branchName 分支
git checkout - # 切换到上一分支 类似 cd -
# 更改分支名
git branch -m <oldBranch> <newBranch> # 更换分支名称
git merge/rebase/cherry-pick
代码合并是多人协作开发必要命令,在日常开发中可能每个功能块均有一个或多个人开发或者每个人都自己维护了一个本地分支。 大家为了避免冲突做了很多分支和代码管理上的约束。都是为了降低代码管理的成本。下面主要说明几种不同的合并方式,第一是merge
第二是rebase
,第三是cherry-pick
。
git merge
# git merge
git merge dev # 将 dev 分支合并到当前分支
git merge origin/dev # 将远程主机 origin 的 dev 分支合并到当前分支
--continue # 有冲突时执行
--abort # 放弃合并
--allow-unrelated-histories dev # 合并独立分支代码
--no-commit # 使用分支上的最后的提交 commit 信息,否则会出现 Merge branch ‘test’ into develop 合并记录
--squash # 压缩所有合并
git rebase
# git rebase
git rebase master # 将 master 分支 合并到 当前分支
git rebase origin/dev # 将 远程主机 origin 的 dev 分支 合并到 当前 分支
--continue # 有冲突时执行
--abort # 放弃合并
git rebase -i commtId # 压缩合并代码
⚠️ 如当前分支是 dev 分支, 执行 git rebase master,则 dev 分支上的代码是传入的代码。
git cherry-pick
# git cherry-pick
git cherry-pick commitId # 从其他分支 pick 到当前分支
git cherry-pick commitId1^..commitId2 # 连续的 commit 记录 pick 到当前分支
--continue # 有冲突时执行
--abort # 放弃合并
git cherry-pick -m 1 commitId # -m 1 表示使用父分支代码(代码合并的commitId)
git reset
git checkout .(<fileanme>|/dirname) # 撤销修改,不建议使用,会造成修改的文件无法找回。(从工作区撤回)
git checkout [commitId] <filename> # 将文件 file 从仓库恢复
git reset HEAD <filename> # 从暂存区撤销指定文件
git reset --hard/(--soft) HEAD # 硬回退到最后一次提交(硬/软)
HEAD^ # 最后一次提交的前一个提交(硬/软)
HEAD~number # 回退到前 number 版本(硬/软)
commitId # 回滚到当前 commitId
git reset commitId <filename> # 回滚某一个文件
git restore <filename> # 恢复到这个版本
git revert commitId # 回滚到指定的 提交( 作为一次提交 )
--abort # 放弃回滚
--skip # 跳过冲突
--continue # 继续操作
git reset tagname # 回滚到指定的版本号
附录
创作不易,欢迎打赏。你的支持,是我持续创作的动力哦。如果文章表述不清或错误,欢迎大家留言。我会及时反馈给大家,希望帮助到大家。