git
基础
checkout == checkout HEAD / diff HEAD
Respository => Index reset
Index => workspace checkout/diff /restore
暂存区恢复文件到工作区 git restore .
- ssh-keygen -t rsa -C “xxxxx@xxxxx.com“
- cat ~/.ssh/id_rsa.pub
- ssh -T git@gitee.com
- git config –global user.name “”
- git config –global user.email “”
查询
git status git reflog (show) 查看历史操作记录
- git log 查看版本详细信息
- git reflog 查看版本信息,以便确定要回到未来的哪个版本
- git reflog git reflog –pretty=oneline
- git log -oneline –graph –all 图示显示所有分支的历史
- git log –graph // graph 图git log –graph –pretty=oneline –abbrev-commit
- -oneline 一行
- -n n个commit
- xx 文件名
- -p xx 某个文件的所有修改 git log 参数-p展开每次提交的内容差异,用-2显示最近的两次更新,如git log -p -2
- –pretty=oneline xx –pretty=raw 查看commit之间的父子关系(root commit是没有父提交的 git log –graph # → 查看当前分支commit生成的树状图
git log --graph图
查看分支合并图- git log –pretty=oneline xx # → 查看xx文件提交的历史记录(只显示哈希值和提交说明)
git help git version
基础
- git init [project-name]
- git add . add 添加历史副本
- git commit -m “” git commit -am “” (-a -m) 提交所有修改 git commit -amend 将暂存区和当前commit合并创建一个新commit去替换当前commit 添加标签
- 将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:git commit -a -m “commit_info” == git add . git commit -m “xxx”
- git remote -v 查看关联的远程仓库 + show origin +
add origin <git url>
rm [remote-name] 移除远程仓库 rename [old-name] [new-name] 修改某个远程仓库在本地的简称 git remote prune orign 删除远端 origin 已不存在的所有本地分支- git remote add origin master / git remote add gitee [.gitUrl]
- git clone [url]
- git rm –cached [file name] 从暂存区中删除文件,但是工作区依然还有该文件
- git mv [file-original] [file-renamed] 重命名文件,并将已改名文件提交到暂存区
- git blame
<file>
git reset --hard commit_id
恢复到某个commit git log 获取commit_id- git rebase xxx:假设当前分支与xxx分支存在共同部分common,该指令用xxx分支包括common在内的整体替换当前分支的common部分(原先xxx分支内容为common->diversityA,当前分支内容为common->diversityB,执行完该指令后当前分支内容为common->diversityA->diversityB)git rebase master
暂存
- git stask list/clear/pop/apply/drop 解决开发功能没有完成,但是线上有bug要处理,可以先暂存取起来,保存起来,再切换分支 未处理完的变更先保存到stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
- git stask list 查看暂存列表
- git stash clear 删除全部暂存
git stash drop <stash@{ID}>
删除暂存 - git stash 暂存
- git stash save -a “message” 标识储藏记录
git stash pop <stash@{ID}>
恢复暂存改动 git stash apply 保留- git stash pop 可取出最近一次储藏的修改到工作区中,并同时将该储藏从储藏记录列表中删除
- git stash pop stash@{数字n} 取回某次stash的变更
- git stash apply stash@{index} 取出指定index的储藏的修改到工作区 不删除暂存记录
- git stash drop stash@{index} 将指定index的储藏记录中删除
差异
- git diff
git diff <commit ID><commit ID>
两个commit的差异- git diff [文件] 工作区和暂存区的差异 diff/[checkout]
- git diff -cached [文件]
- git diff -HEAD [文件] 工作区和本地仓库的差异 diff HEAD
- git difftool 提交1 提交2 比较两个commit 差异
- git rebase 变基
- rebase操作可以把本地未push的分叉提交历史整理成直线;
- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
分支
git branch r/v/av/a m d 分支名
查看分支 git branch 查看本地分支 -r(romte) 远程分支 -v 查看当前工作分支及本地分支 -av 查看本地分支和远端分支 -a 本地和远程分支
重命名分支 git branch -m 旧分支 新分支 / git branch -M main 强制
创建分支 git branch 分支名 创建分支
git branch 新分支 指定分支
(基于指定分支创建新分支 git branch 新分支 commit的id (基于某个commit创建分支)删除分支 git branch -d(delete) 分支名 / git branch -D 分支名 强行删除分支
git branch --set-upstream branch-name origin/branch-name
建立本地分支和远程分支的关联
git checkout -b 创建分支 分支名 切换分支
- git checkout 切换分支 // git switch 切换分支
- git checkoub -b(branch) 分支名 (创建并切换分支) // git switch -c
创建切换分支 - git checkout -b 本地分支 origin/远程分支 拉取远程分支并创建新分支
git merge 合并分支
- git merge A分支 (A合并到当前分支) git merge A分支 B分支 (A分支合并到B分支)
- 查看合并分支
- 查看哪些分支与指定分支合并 git branch –merged
- 查看哪些分支没有合并到当前分支 git branch –no-merged
git fetch 取回分支 远程仓库 => 本地仓库 将远程仓库内容更新到本地
- git fetch -all 将远程仓库的所有更新取回本地
git fetch <remote>
取回远程仓库的所有更新git fetch <远程仓库> <分支名>
取回远程仓库特定分支git fetch origin <branch-name> <local-name>
取回远程仓库的特定分支到本地仓库的具体分支git fetch --p
更新远程分支到本地仓库分支
git push vs git pull
- git push 推送代码 git remote add gitee git
- git push (-f强制) origin master
git push origin --delete(-d) <branch>
删除远程分支git push <remote> <local-branch>:<remote-branch>
推送本地分支到远程仓库不同名分支- git push github master / git push gitee master
- git pull 拉取代码 类似 git fetch + git merge 远程仓库 => 工作区
- git pull / git pull origin master:master origin的master合并到当前master
- git pull –rebase origin master
- git push 推送代码 git remote add gitee git
撤销
git checkout 撤销工作区的修改 暂存区 => 工作区(暂存区没有 本地仓库到工作区) 暂存区暂存了文件 工作区
- git checkout 文件名
- git checkout 文件1 文件2 文件3 暂存区 => 工作区
git revert HEAD 撤销提交 首选方式,没有任何丢失代码的风险 只能抵消上一个提交,如果想抵消多个提交,必须在命令行依次指定这些提交
- git revert [倒数第一个提交]【第二个】
git reset 丢弃提交 希望以前的提交在历史中彻底消失,而不是被抵消掉
git reset -hard HEAD
git refloggit reset 回滚 git
- 暂存区 撤销
- 本地仓库 => 暂存区
- git revert
// 版本号 // 回滚 到本地 不删除云端回滚记录 - git reset –hard
// 回滚 删除云端回滚记录 - git reset –hard HEAD^ //下一个版本
- git reset –hard 版本号 //版本号不用写
- 暂存区 撤销
替换上一次提交 git commit –amend -m “Fixes bug #42”
从暂存区撤销文件 git rm –cached [filename]
标签 标签也是版本库的一个快照 发布一个版本时,我们通常先在版本库中打一个标签(tag)
git show <tagname> git show v0.1 v1.4
显示所有标签信息 / git showgit tag 列出所有标签 git tag -l “v1.4.2.*” 特定的搜索模式搜索
- 两种标签
- 轻量级标签
git tag <tagname v1.5>
- git tag -a v1.4 -m “tag message”
git tag -a <tagname> -m "标签信息"
- 含附注(带有说明的标签)的 -a/-s -m
git tag -s v1.5 -m "tag message"
用GPG来签署标签
- 轻量级标签
- git tag -v1.5 验证已签署的标签
- git tag -d 删除本地标签
- git push origin :refs/tags/v0.9 删除远程标签
- 两种标签
git push origin 将标签推送到远程仓库
git push origin –tage 将本地所有标签推送到远程仓库
功能分支工作流 Github flow
- 创建feature统一合并到maste
Gitflow WorkFlow
- git pull
- git checkout -b feat-login_2020 创建开发分支
- git push 推送分支
- 暂存 git stash 暂存 git stash pop 恢复
- git status
- git diff 查看文件diff文件修改
- git add . / git add 文件
- git commit . 提交本次修改 git commit –amend 将暂存区和当前commit合并创建一个新commit去替换当前commit
- git fetch –all 拉取所有远程仓库代码
- git merge origin/maste git merge origin/develop 如果是多人协作,merge同事的修改到当前分支(先人后己原则) 合并远程仓库
- git push
- git merge –no-ff origin/develop // 同事review code之后管理员合并origin/develop到远端主干origin/master
- git rm 删除工作区文件,并且将这次删除放入暂存区
.gitignore git忽略文件