git基本操作命令和扩展知识

git.png

秉承使用原生命令,少使用工具(工具使人变笨 ...)
因为在很早之前一直使用各种git集成化工具,后来发现自己的命令基本全忘了 ...
并且看工具执行的操作,也是执行了各种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 分支名】最后将新的提交推送到远程仓库
使用 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

纯手打代码,希望能帮助大家;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,257评论 9 467
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,663评论 4 54
  • 中午睡得懵懵懂懂的,嫂子发来信息,我愣是没反应过来接着就发来一张照片。这下我清醒了,也没有时间去计较没到点就在办公...
    向行阅读 469评论 6 6
  • 听过鲸鱼和池塘的故事吗?」你说,「鲸鱼因水量不足而死,池塘则因被消耗太多而干枯。」 『或许我可以让自己变成大海。』...
    遇见Cindy阅读 1,217评论 0 0