初始化git仓库,会生成一个git文件,用来记录你的git操作
git init
克隆远程库,将远程库克隆到本地
git clone git地址
关联远程库
git remote add origin "仓库地址";
git查看远程仓库地址命令
git remote -v
上传到暂存区,
// 上传某个文件 git add 文件名 // 上传所有文件 git add . / git add *(常用的,一般通过配合(.gitignore)文件忽略部分不必上传的依赖文件 //查看暂存区文件 git ls-files git add 撤销 //撤销git add 某个文件 git reset HEAD 文件名 git reset HEAD(撤回所有git add文件)
提交到本地库(目前还没提交到远程,为待上传状态)
git commit -m 提交说明 commit 撤销 //1 把最后的commit切回已经git add状态 git reset --soft HEAD"^" //2 把最后的commit切回还没git add状态,保留修改 git reset HEAD^
add + commit:git commit -am 提交说明
提交到远程库
//首次可以-u与当前远程库进行关联,后面提交可以简写 git push -u origin 分支名 //例如 git push -u origin master(主分支) 后面可以 git push origin 分支名 或者直接 git push
修改上一次提交说明文字
git commit --amend -m new Name git push
拉取远程最新更改
git pull
撤销文件修改,撤销所有文件修改
//撤销部分文件 git checkout -- 文件名 //撤销全部文件 git checkout -- .
重命名文件和删除文件(已被git管理的文件才可以哦)
重命名: git mv 原文件名1 文件名2 例如: git mv index.html index1.html //把index.html修改为index1.html 删除: rm 文件名 //不要误删哦,删了可以git reset HEAD
查看所有分支:git branch -a 查看当前分支:git branch 查看本地分支对接远程库:git branch -v / git branch -vv 创建分支:git branch 分支名 切换分支:git checkout 分支名 或者git switch 分支名 创建+切换分支:git checkout -b 分支名 或者 git switch -c 分支名 删除分支:git branch -d 分支名 做此操作前必须先切到其他分支,不可在当前分支做删除操作 删除远程分支:git push origin 空格 :分支名 === git push origin -d 分支名 删除操作 例如: git push origin :test 修改分支名name1->name2:git branch -m 原名 修改名 提交本地分支到远程(当远程没有当前本地分支时可以使用):git push --set-upstream origin 分支名 //该命令会在远程新增一个和本地同名分支,并同步本地文件 拉取远程分支并在本地创建一样分支名 : git checkout -b 分支名 origin/分支名 <注意:当新建远程分支后,须在本地先git pull一下,检出远程新增分支,然后使用上述命令拉取新建远程分支到本地,最好取一样分支名>
查看当前版本库状态: git status 日志查看 git log 查看完按q键退出(quit嘛) 1. 直接在log命令之后,加 -n参数,n表明你要输出的数量: git log - 2 2. 简化git log的默认的输出,仅输出commit hash 前7个字符串和提交说明: git log --oneline 3. 在git log 的基础上输出文件增删改的统计数据: git log --stat 4. 控制输出每个commit具体修改的内容,输出的形式以diff的形式给出: git log -p || git show(默认HEAD) 5. 这个命令用来输出汇总信息,以作者进行分类: git shortlog git shortlog -s:用来统计每个作者的提交数量。 git shortlog -n:用来对统计的量进行倒序排列。 6. 加--author用来过滤commit,限定输出给定的用户:git log --author="作者名" 7. 限定指定日期范围的log: git log --after(或者before) 11-30-2020 8. 控制是否显示merge的commit: git log --merges || git log --no-merges 9. git log输出时,显示对应commit所属的branch和tag信息: git log --decorate --oneline 10. 历史提交并列显示:git log --pretty=oneline 11. 查看git详细操作日志 git reflog 12. 可以看到分支合并图更详细:git log --graph 13. 可以看到分支合并图更简洁:git log --graph --pretty=oneline --abbrev-commit 14. 查看远端分支:git log origin/master(分支名)
阮一峰 cherry-pick详细教程
一、基本用法 git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。 git cherry-pick <commitHash> || master 如果你需要在dev分支做了bug修改, 代码改完了也commit了 , 然后发现写错分支了,我****,你想把master上的代码移到dev上, 这时你就可以使用cherry-pick来进行操作,在dev分支执行git cherry-pick master (hash也可以), 这时master的提交代码就过来了。(master已提交不会被清掉哦) Cherry pick 支持一次转移多个提交:git cherry-pick hash1 hash2 Cherry pick 转移一系列的连续提交:git cherry-pick hash1^..hash5 例如: git cherry-pick f5674^..0a7a7 如果不带这个^,则f5674不会被转过去,注意要按提交顺写,前些早提交,后写后提交。 其他配置项及代码冲突请移步到阮一峰大佬那去看,更详细。
定义:rebase(变基)改变当前分支的基础分支版本(父版本)
注意:变基会改变提交历史,提议使用这个方法时 ,只在本地操作,不要推送到远程,并且不要在master分支执行。
和cherry-pick区别:由A转到B:
cherry-pick:在B中操作
rebase:在A中操作
在A分支中 执行git rebase B,会将B中的修改提交拉取到A中,并保留一个提交信息, 提交视图一条直线,更加清晰,不会像merge那样提交视图错乱,但是会缺失提交信息。不熟的话需慎用!!!搞项目还是merge稳妥点 解决冲突:修改文件(vi 文件名)-》git add .-> git rebase continue(可能执行多次) 忽略冲突:(放弃所在分支修改,使用其他分支):git rebase --skip(可能执行多次) 撤销rebase:git rebase --abort
可以参考这篇文章的讲解:GIT变基
merge:合并分支 合并某分支到当前分支:git merge 某分支名 注意:(在当前分支做合并其他操作) 把b合并到a, 在a分支:git merge b 不会丢失合并信息:git merge --no--ff git merge --no-ff -m "merge with no-ff" 分支名
commit之后如果没有提交远程可以回退当前版本 git reset --hard HEAD 2次回退:git reset --hard HEAD^^ 50次回退:git reset --hard HEAD~50 回退到指定版本:git reset --hard commit_id
使用场景:当你在A分支开发时,发现B分支有一个bug需要紧急处理,你此时还没开发完毕,不想提交代码,你也不能切换到B分支,由于修改没有提交,这时就可以用git stash save "保存说明",先把修改存到缓存中,然后就可以切到B分支做处理。做完后回到A分支,继续你的开发git stash list 查看保存列表,然后git stash pop(默认取出第一条,并从列表中删除这条缓存),或者 git stash pop stash@{n},n为数字。或者git stash apply stash(默认取出第一条,不从列表中删除这条缓存,最好回来了就删除吧。省的后来开发影响)
stash:保存现场(临时保存)
1:提议:在功能未开发完成时,不要commit
2:规定:修改文件,在没有commit之前,不可切换分支(两个分支在同一时刻,是可以切换的)
如果还没有将某一个功能开发完毕;需要切换分支去修改bug,可以git stash;
保存现场:git stash
查看现场:git stash list
恢复现场:git stahs pop(将原来保存历史删除,用于还原内容)
恢复最近一次的现场:git stash apply(不删除保存历史,用于还原内容)
恢复最近一次的现场:git stash apply stash@{num}(num=1,2,3,4)
手工删除:git stash drop stash@{2}//删除最近第二次
清空stash:git stash clear命令git tag 标签名 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
可以指定标签信息;命令git tag -a 标签名 -m "线上版本..." {创建新对象}
可以查看所有标签:命令git tag
删除标签:git tag -d v1.0
删除远程标签:git push origin 空格 :refs/tags/v1.0
查询标签:git tag -l v1.0
查询标签:git tag -l v* (模糊查询)
推送标签到远程:git push origin v1.0
推送全部本地标签到远程:git push origin --tags比较本地库和工作区差异:git diff 比较a,b分支差异:git diff a b:|| git diff -u a b 比较两个版本差异:git diff commit_id1 commit_id2 比较本地库和暂存区差异:git diff --cached commitID 比较最新本地库和暂存区差异:git diff --cached HEAD 查看两个版本文件的修改:git diff commit_id1 commit_id2 文件名 例如: git diff commit_id1 commit_id2 /pages/detail/index.html
多人管理; 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。 要查看远程库的信息,用git remote: 查看远程库信息,使用git remote -v; 本地新建的分支如果不推送到远程,对其他人就是不可见的; 本地--》远程 第一次提交:git push -u origin/master 建立本地分支和远程分支的关联,使用git push --set-upstream origin 分支名 把当前分支指向新远程分支bug2: git push origin HEAD:bug2 远程--》本地 在本地创建和远程分支对应的分支, 使用git checkout -b 分支名 origin 分支名,本地和远程分支的名称最好一致; git checkout -b dev origin dev git checkout --track origin dev 查看无效分支:git remote prune origin --dry-run 删除无效分支:git remote prune origin 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。 显示远程分支:git remote show origin 显示远程分支:git remote show 追责命令:git blame index.html 查看index.html的所有提交commitiD 和每行作者 常用分支名: 生产分支:master 开发分支:develop 测试分支:test bug分支:bugFix
差不多了,工作中能用到也就那几个,如果有问题呢,可以评论留言,我来修改。实则vsode不用命令就可以直接操作了,推荐两个好用的vscode插件,GitHistory和GitLens,都不错,推荐使用
后续有啥好用的没写到,也可以下方提示一下,也要学习嘛,别掖着哈~ 谢啦~