场景:从git库中克隆项目
- git clone <仓库URL> [<本地目录>]
- 本地目录不指定按照项目名创建同名目录
git clone git@gitee.com:xxxxx.git <--默认项目同名目录
git clone git@gitee.com:xxxxx.git dirprj <-- 创建到dirprj目录里
场景:设置git别名
- 后续实例都按照别名进行演示
- 直接修改用户目录下.gitconfig这个隐藏文件
[alias]
st = status
co = checkout
br = branch
l = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --decorate
- st – 状态命令
- co – 检出命令
- br – 分支命令
- l – 日志命令
场景:本地检出分支
- 远端有分支但是本地没有这个分支,需要切换到这个分支
git remote update //先更新一下远端信息,如果本地已经包含了远端分支信息,此语句可以忽略
git co -b branchName origin/branchName //远端分支branchName创建一个本地分支
场景:查看本地分支追踪远端的分支信息
git branch -vv 查看详细信息,其中能看到本地连接最终的远程的分支信息
场景:本地分支追踪远端分支信息有误进行修改
- 先查看本地分支追踪远端哪个远端分支
git branch -vv
- 发现追踪的分支有错误,可以修改远端追踪的分支
git branch -u origin/newbranch //把追踪的远端分支修改为newbranch
//或者
git branch --set-upstream-to=origin/newbranch //把追踪的远端分支修改为newbranch
- 如果我们需要追踪的分支,远端不存在。
//那我们在当前分支再创建一个新的分支
git branch -b newbranch2
//然后再进行推送就可以新建一个远端的分支了
git push --set-upstream origin newbranch2 //因为远端不存在newbranch2所以推送的时候进行设置
场景:分支修改名称
git branch -m oldbranch newbranch //把oldbranch 修改名称为 newbranch
场景:本地分支切换
- 如果本地有多个分支之间互相切换采用
git co branchName //切换到branchName分支
场景:代码更新并提交到本地
git add . //本地修改都已经更新到索引中
git commit -m "增加注释" //提交到本地版本库
场景:提交代码到远端
- 第一次push
git push --set- upstream origin branchName //推送到远端的 branchName
- 之后再push,远端已经存在分支
git push
修改最近一次提交的注释
git commit --amend -m "新的注释"
场景:打标签并推送到远端
- 在branchName上打标签并推送到远端仓库
git co branchName //切换到branchName分支,如果已经在这个分支上可以忽略
git tag -a tagname -m "说明" //创建tag
git push origin tagname //推送tagname到远端仓库
场景:查询标签
git tag -l "v*" //查找v开头的分支
场景:删除标签
git tag -d tagname //删除tagname标签
场景:切换到标签
git co tagname
场景:提交回滚操作
这个有两种做法
- 方法一:利用reset退回上一次操作
git reset HEAD~1 //默认mixed的,讲提交的内容从提交记录中和cache中删除,本地不回滚
git co . //本地不回滚有个好处是可以确认一下,之后执行checkout将本地的变更回滚调
git push -f //这个时候其实本地仓库落后远程仓库一个版本,所以push的时候需要强制用旧版本覆盖新版本这里加-f参数
- 方法二:利用revert功能
git revert commitId //这样可以按照commitId对应变更生成一个反向的操作,同时会生成一个新的commit
git push // 因为是新的commit可以直接Push
场景:将其他分支的功能整合到当前分支
- 这里使用cherry-pick功能。cherry-pick用法有一下几种情况
git cherry-pick <commit_id> //将commit_id对应的更改,在本分支生效
git cherry-pick <commit_id1> <commit_id2> <commit_id3> //一次将多个提交,在本分支生效
git cherry-pick <commit_id1>...<commit_id2> //将(commit_id1,commit_id2]之间所有的提交都在本分支生效。左开右闭
git cherry-pick <commit_id1>^...<commit_id2> //将[commit_id1,commit_id2]之间所有的提交都在本分支生效。左闭右闭