【本博客所有关于git文章迭代汇总】git操作(暂存,回退,绑定远程等),看这一篇就够了
1、git常用操作
git 小白操作,无非是clone,然后拉取,提交分支,第一次clone的时候,关联远程分支可能会遇到问题,可以看第四条git关联远程分支
# 在当前目录新建一个Git代码库
$ git init # 新建一个目录,将其初始化为Git代码库
$ git init [project-name] # 下载一个项目和它的整个代码历史
$ git clone [url] $ git status 获取修改的内容
$ git add * 上传修改的内容 $ git commit -m '注释信息' 添加注释 如果没有添加注释 出现绿色字提示
输入 :wq 退出 $ git push 提交代码 origin master $ git push -u origin master 第一次推送 $ git pull 拉取代码 $ git checkout ymtc@xxx 转到ymtc分支
$ git merge ymtc@develop 合并分支
这里第一次推送需要注意,本地推送到远程用git push
命令,实际是把当前master分支推送到远程。
由于远程仓库是空的,我们第一次推送的时候,加了-u参数。git不但会将本地的master分支推送到远程新master分支,还会把本地master分支和远程master分支关联起来。
在以后的推送和拉取时可以简化命令。推送成功以后,可以立刻看到远程仓库的内容已经和本地一摸一样了。
2、git stash 暂存
周一上班,本来想干活的,一看自己在预发分支,切develo分支还切不过去,一看自己可能周六加班脑袋不清楚,在release分支上面修改了代码。
此时,我也不想在release上面提交,然后解锁了git stash,发现这个贼好用。
有时候工作区还在改动,但是要提交。如果有不想提交的,就会报错。
正确的方法是,stash一下,提交之前add的内容,提交完以后,再pop弹出。
使用场景:
1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。
这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
更多git stash 说明,看git stash详解 篇文章
3、git 回退版本
工作中,有时候合并分支导致项目大乱,小白就懵圈了。这时候大佬祭出reset,回退到指定版本,或者上一版本,完美解决。
git reset 有三种模式
reset --hard:重置stage区和工作目录: reset --hard 会在重置 HEAD 和branch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。
reset --soft:保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区 reset --soft 会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。
reset 不加参数(mixed):保留工作目录,并清空暂存区 reset 如果不加参数,那么默认使用 --mixed 参数。它的行为是:保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。
重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit历史版本号]
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard HEAD^回退到上一个版本
$ git reset --hard HEAD^^回退到上上版本 $ git push -f 强制提交
soft是回退,版本修改了,保存了,但是没有add的状态
git reset --hard HEAD^ 是完全擦除了上次提交的记录,git push -f 强制提交以后,线上的最近一次的版本也擦除了。
另:
后来又遇到新问题了,reset hard就是强制回退到之前版本,在此基础上的修改,会比远程仓库的落后(behind),所以怎么都push不上去,搞了一两个小时。
最后一步push的时候用以下命令就可以了。
$ git push origin 分支 --force
git reset 和 git revert 的区别
git revert是用一次新的commit来 回滚之前的commit,git reset是直接 删除指定的commit。
在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
4、git 克隆,提交本地修改到远程,以及关联远程分支
github 上克隆项目,绑定本地分支搞了好久,以下是总结
$ git clone $ git init # 切换到需要保存文件的文件夹
$ cd shop $ git branch -al //查看所有分支 $ git pull origin master //拉取 $ git branch -vv //绑定本地和远程分支 $ git pull //再次拉取 $ git status //查看状态 $ git add * $ git commit -m '提交测试' $ git push
参考与扩展:https://blog.csdn.net/weijinqian0/article/details/76217014
5、合并指定分支
工作中又遇到一个问题,我们系统有两个分支,两个分支的内容不同,但是两个分支都需要优化,优化的提交有相同的部分。
如果按照死方法,就是两个分支分别敲代码,效率很低。
后来找到这个方法,将A分支指定提交合并到B分支,完美解决。
$ git cherry-pick +分支的哈希值版本号
参考与扩展阮一峰:git cherry-pick 教程
6、github提交代码,快速通道
#本地初始化git目录
git init #新建文件并且写入内容 touch a.txt
echo "new data" >> a.txt #添加到暂存区
git add . git commit -m "a.txt" #添加远程仓库
git remote add origin 地址 #本地仓库也远程仓库关联
git branch --set-upstream-to=origin/master master #拉取远程仓库内容到本地
这时候用git pull会提示(毕竟本地和远程仓库没啥关系指针连接不起来的缘故吧): fatal: refusing to merge unrelated histories 因此命令应该改为: git pull origin master --allow-unrelated-histories #将最新的内容推送到远程仓库
git push origin master
6、其他命令
$ git pwd 用于显示当前的目录 $ git rm 文件名 删除文件
命令汇总:
#git 命令 git init //初始化git 工程 git remote -v //查看远程仓库地址 ls -a // 查看本地仓库文件 ls // 查看本地仓库文件,但是不显示 以点开头的文件 git branch -d <branch_name>/git branch -D <branch_name> // 删除分支 git reset --hard FETCH_HEAD //拉取出错时,里面包含此字段可以用这个命令解决 echo "文件内容" >> README.md // 创建文名为README.md ,并写入内容 git status //命令用于显示工作目录和暂存区的状态 git clone 项目url //从服务端克隆项目 git checkout -b dev //我们创建dev分支并切换到dev分支 git branch 会列出所有分支,当前分支前面会标一个 *号。 git branch //查看本地分支 git branch -r //查看远程分支 git branch -a // 查看本地分支和远程分支 远程分支为红色 当前分支前面带有 * 号 git fetch //远程仓库不显示时,使用此命令 git remote -v //查看所有远程地址 git checkout -t remotes/origin/video_dev(remotes/origin/video_dev:远程分支名)//切换分支 git pull --rebase //更新代码 #提交 git commit -am "<提交说明>" //将所有修改,但未进stage的改动加入stage,并记录commit信息;
git commit -m"提交说明" //提交代码到本地仓库
git push -u origin master //推到远程
git push -u origin master //强制推到远程
git push <远程主机名> <本地分支名>(冒号)<远程分支名> //也就是 $git push origin master(冒号)master 推送到远程
git add . / //添加到git
首先git pull 然后 git checkout 分支名字 //切换分支命令
git push origin master:master //推送到远程
git push origin master:分支名字 //推送到远程
其他参考:
阮一峰git文章 http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
文章会持续迭代,欢迎关注!收藏!转发!
如果你在工作中有什么关于git的好方法,好命令,也可以留言,看到会迭代进去。
【本博客所有关于git文章迭代汇总】git操作(暂存,回退,绑定远程等),看这一篇就够了的更多相关文章
- Git学习(三)——暂存区、远程仓库、增删改管理
一.工作区和暂存区 工作区(Working Directory) 就是在你的电脑里能看到的目录 版本库(Repository) 工作区中的一个隐藏目录.git,这个不算工作区,而是Git版本库.Git ...
- git中的版本库,暂存区和工作区
- Git入门看这一篇就够了! (转)
Git 的三种状态 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed):数据已经安全的保存在本地数据库中. 已修改(modified):已修改表示修改了文件,但还没保存到数据 ...
- 【Git】三、工作区、暂存区、版本库
一.基础概念 工作区:电脑中可以看到的目录,为电脑中的项目文件 暂存区:暂存修改的地方 版本库:存放项目的各个版本文件 二.详细介绍 工作区为我们工作所使用的目录,在工作区我们对项目文件进行增删改查. ...
- Git 看这一篇就够了
上一篇讲 Git 的文章发出来没想到效果特别好,很多读者都要求继续深入的写. 那今天齐姐简单讲下 Git 的实现原理,知其所以然才能知其然:并且梳理了日常最常用的 12 个命令,分为三大类分享给你. ...
- [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
@ 目录 *本文说明 请大家务必查看 前言 首先介绍一下主角:Hexo 什么是 Hexo? 环境准备 详细版 入门:搭建步骤 安装git: 安装node: 安装Hexo: 进阶:hexo基本操作 发布 ...
- Git让你从入门到精通,看这一篇就够了!
简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...
- Git让你从入门到精通,看这一篇就够了
简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...
- Git时光机穿梭之工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...
- git命令--git checkout 之 撤销提交到暂存区的更改
SYJ@WIN-95I6OG3AT1N /D/gitlab/ihr-kafka-produce (master) $ git status [由于工作区文件被修改了,所以显示为红色] On branc ...
随机推荐
- Ubuntu18.04 软件源更新:图形界面
通过图形UI界面更新Ubuntu的软件源,手动修改虽然简单,但是要自己去找源,选一个系统配置好的更简单.但是新版的好像没有该功能,找到个奇葩的路径: 将Ubuntu16.04升级为Ubuntu18.0 ...
- Cilium系列-5-Cilium替换KubeProxy
系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...
- Linux 中设备的分类及网络设备接口路径
设备分类 字符设备 块设备 网络设备 参考文档: 手把手教Linux驱动 网络设备位置 [root@localhost ~]# cd /sys/class/net/ [root@localhost n ...
- java文件共享实现方案
写在前面,由于项目要求负载,又不想大动干戈采用比较贵的设备和高大上的框架,经过一番研究,想使用文件共享方式实现文件的跨服务器访问.本方案采用了jcifs和smbj框架,若想用,请自行查找资源.此为初步 ...
- searchsploit用法
kali里面自带这个工具,用来搜索www.exploit-db.com上面的漏洞库,在由于是提前内置了数据库所以不联网也可以用. 使用之前先更新一下确保是最新的漏洞库 searchsploit --u ...
- 其实webpack编译"模块化"的源码没那么难
我们在 webpack初体验 这篇文章中演示到,浏览器不支持 CommonJS ,在特定场景下才支持 Es Module ,而 webpack 可以将这些模块化的代码解析成浏览器可识别的语法. 那么 ...
- 「AntV」x6 框选添加右键菜单
今天在群里有个小伙伴提出了这么个问题:如何在框选完成后给框选的区域添加一个右键菜单的功能,我看到了这个问题后也是有点懵,心里想着怎么还有这个需求,直接快捷键删除不是更好吗,谁知这位小伙伴也是这么写的, ...
- 论文解读(IW-Fit)《Better Fine-Tuning via Instance Weighting for Text Classification》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Better Fine-Tuning via Instance Weighting for Text Cl ...
- P1830题解
思路: 利用桶存储轰炸区域,双重循环. 在存储轰炸区域时将次数刷新,也就是pos[j][k]=i;. 下面是核心代码: for(int i=1;i<=x;i++) { int x1,x2,y1, ...
- doris单机安装部署
原文出处 doris单机安装部署 下载Doris 环境要求 Linux系统:Centos7.x或Ubantu16.04及以上版本 Java运行环境: JDK8 java -version 在windo ...