秉承使用原生命令,少使用工具(工具使人变笨 ...)
因为在很早之前一直使用各种git
集成化工具,后来发现自己的命令基本全忘了 ...
并且看工具执行的操作,也是执行了各种git
命令,所以记得常用命令!!
git常用基本命令
- 初始化git
git init
// 告诉git ‘我’ 是谁
git config --global user.name '三脚猫'
git config --global user.email '12345678@qq.com'
git config --list 查看个人信息
- 关联远程库(github)
【添加远程地址库】git remote add origin http://github.com/superhaohao
【查看当前远程库地址】git remote -v
【克隆远程库代码】git clone http://github.com/superhaohao
【克隆指定远程库代码】git clone -b xxx .git地址
// 克隆完然后...有弹窗需要打上码云或者github的账户和密码
【修改远程仓库】git remote set-url origin git@gitee.superhaohao/in.git
【删除远程仓库】git remote rm origin
【修改仓库名称】git remote rename origin <newName>
- 分支操作
【查看分支】git branch (带*的是当前分支)
【查看所有分支】git branch --all
【创建分支】git branch (分支名)
【创建分支并移动到里面】git checkout -b (分支名)
【删除分支】git branch -d (分支名)
【拉取远程分支并创建本地分支】git checkout -b (本地分支名) origin/远程分支名
【查看所有远程/本地分支当前版本】git show-branch -a
- 代码合并基本命令 (7步操作)
【拉取代码】git fetch (拉取到缓存区,还需要手动合成代码)
【合并代码】git merge (远程分支名) eg: git merge origin/master
【查看冲突】git diff
【查看所在分支】git branch
【查看所有分支】git branch --all
【切换分支】git checkout (分支名)
【移动到某分支】git checkout (分支名)
【添加到缓存】git add . (.是指所有文件)
【撤销缓存】git reset <file> (<file>是指定或者不加是全部)
【查看缓存状态】git status
【版本说明】git commit -m '网站v2.0版本'
【撤销版本】git reset --hard (commit_id) (id用git log查看)
【推送代码】git push origin (本地分支名):(远程分支名)
- git后悔药
【撤销commit】git reset --soft HEAD^
【撤销commit和add】git reset --hard HEAD^
【查询版本】git log (查看版本号)
【回退版本】git reset --hard HEAD^ (回退到上一个版本,ps: 上上个版本就是 HEAD^^)
【回退指定版本】git reset --hard 3628164 (翻上面log命令,复制commit id加密字符串前几位都行)
【关机后悔药】git reflog (查询git history命令找到你回退指定版本的commit id 。再次回退)
-
git log
一些扩展命令
【简约版查看 log】git log --oneline
【只看2次提交】git log -3 / git log -n 3
【查看影响文件】git log --stat
【查看所有分支+版本号】git branch -va
【git lg 编写】git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
- git添加多个远程地址,1拖2
其实我们在git remote add的时候 `origin` 就是一个名称而已,我们只需要修改成别的
【添加第二远程库】git remote add mirror http://github.com/superhaohao
【查一下是否成功】git config --list
这时候你能看到有两个地址`remote.mirror.url=`和`remote.origin.url=`
'坑:需要注意的是,当你推送同一个项目不同地址的时候,记得分别两个地址都推送一遍,
不然就会出现版本跨越,就需要用到下面的方法去解决'
- git我最喜欢的粗暴的命令
如果1拖2origin的时候,有时候会忘记推送一个库。下次推送就跨越了版本git报错无法推送,我们需要一些简单粗暴的办法~!
【强行拉取】 git fetch --all
【强行指定版本】 git reset --hard origin/master
【强行合并】 git pull origin master
- 如何生成ssh公钥
【选择目录】cd ~
【生成ssh】ssh-keygen -t rsa -C "619596123@qq.com"
// 三次回车即可生成 ssh key
【查看秘钥】cat ~/.ssh/id_rsa.pub
// 添加后,在终端(Terminal)中输入
【查看状态】 ssh -T git@gitee.com
// 返回:Welcome to Gitee.com, yourname! 表示成功
- 编写自定义git命令
【git st】git config --global alias.st status
【git ci】git config --global alias.ci commit
# eg:git ci -m " - test:xxxxx"
【git lg 编写】git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
【查看alias别名配置】cat .git/config
- 移除远程库提交的git文件
【删除远程文件】git rm -r --cached images
# 执行完上面推一遍代码: git commit -m "delete images/" git push origin master
关于 .gitignore
的忽略文件的推送
遇到没有自动生成
.gitignore
的项目,需要后面自己配置上过滤文件
总结来自:CSDN - .gitignore忽略文件的推送
【创建文件】touch .gitignore
【添加过滤】vim .gitignore
/node_modules
/storage/*.key
/config/database.php
【查看git配置】cat .git/config
【识别配置文件】git config core.excludesfile .gitignore
【删除git本地缓存】git rm -r --cached .
// .gitignore只能忽略原来没有被跟踪的文件,
解决方法就是先把本地缓存删除
进阶 【敬姿势(知识)】
-
git stash
暂存文件
【git stash --help】查看 stash 的姿势
【git stash save '暂存一些吧'】暂存当前所有变动文件
【git stash list】查看所有暂存
【git stash show】查看单个暂存里的变更文件
【git stash show -p stash@{0}】查看单个暂存里的变更文件详细信息
【git stash pop stash@{0}】拿出暂存
【git stash drop stash@{0}】删除某一个暂存
【git stash clear】清空暂存
-
git revert
删除/撤销已提交到远程的分支
git revert
是创建一个新的提交,撤销了指定提交引入的更改。不会删除提交,这样会保留提交历史
【git checkout 分支名】切换到准备要撤销的
【git revert 哈希值】撤销指定版本,并创建新的提交
// ==== 如果有冲突解决冲突
【git push origin 分支名】最后将新的提交推送到远程仓库
-
git merge
和git rebase
(变基合并) 区别,以及使用方式合理规范
GIT使用rebase和merge的正确姿势
使用 rebase 和 merge 的基本原则:
下游分支更新上游分支内容的时候使用 rebase
上游分支合并下游分支内容的时候使用 merge
更新当前分支的内容时一定要使用 --rebase 参数
例如现有上游分支 master,基于 master 分支拉出来一个开发分支 dev,在 dev 上开发了一段时间后要把 master 分支提交的新内容更新到 dev 分支,此时切换到 dev 分支,使用 git rebase master
等 dev 分支开发完成了之后,要合并到上游分支 master 上的时候,切换到 master 分支,使用 git merge dev。
所以 用merge后 就是为了看到分支线。
【rebase冲突后】git add .
【继续变基合并】git rebase --continue
你无需执行 git-commit,只要执行 continue
-
git fetch
的面试问题
面试经常问: git fetch 和 git pull 区别? fetch 好处是什么?
通过上面的结论得出:
git fetch
1、多人协作查看分支信息
2、选择合并方式(merge/rebase) ,当然其实也可以 git pull --rebase
3、分支版本清晰 利于 回滚代码
-
git blame && git show
查看某一行代码的修改历史
(blame意思为责怪:git blame 看一下准备责怪谁最后提交的修改)
【git blame {file_name}】查看某一个文件每一行代码版本号
【git blame -L 104,108 {file_name}】104~108 行代码 (L <range>范围)
【git show {commit_id}】查看版本提交记录
问题
-
git rebase
误合并方法的回滚合并问题
【git rebase --help】先查看可携带的参数
【git rebase --abort】舍弃rebase
-
git cherry-pick
"樱桃"采摘
找回之前某个版本的修改内容,多人协作时候有人覆盖了版本
也可用来挑拣出各个版本的上线内容,用作发布正式版本
首先查看自己的文件`nothing to commit, working tree clean`
【”挑拣”提交】git cherry-pick [版本号]
如果有冲突:
【查看冲突】git diff
【提交代码】git add (files)
【采摘继续】git cherry-pick --continue
【采摘放弃】git cherry-pick --quit
【采摘中止】git cherry-pick --abort
error: ... ...
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
如果有报错,说明有冲突,解决冲突然后commit
【拉取一下最新的代码】git pull origin master
【提交代码】git push origin test:master
-
git commit --amend
回滚打过的版本,前提未提交
【git commit --amend】进入vim然后重新编辑最上面的版本名称
-
git checkout
回滚文件/放弃更改 单个文件/目录
【放弃修改的文件】git checkout -- Readme.md
【放弃所有文件】git checkout .
--- --- --- --- ---
【查看某个文件的版本】git log Readme.md
【回滚文件到某个版本】git checkout b3ea6ab Readme.md
纯手打代码,希望能帮助大家;