【本博客所有关于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 ...
随机推荐
- Acunetix使用说明
简述 Acunetix是一种应用安全性扫描工具,旨在帮助发现和修复Web应用程序中的漏洞和安全风险. Acunetix可以发现以下一些常见的安全问题: 跨站脚本攻击(XSS):通过在网页中注入恶意脚本 ...
- 【RabbitMQ】当队列中消息数量超过最大长度的淘汰策略
[RabbitMQ]当队列中消息数量超过最大长度的淘汰策略 说明 最近在研究RabbitMQ如何实现延时队列时发现消息进入死信队列的情况之一就是当消息数量超过队列设置的最大长度时会被丢入死信队列,看到 ...
- Oracle定时任务(执行某一SQL语句)
Oracle定时任务,是定时调用存储过程,执行存储过程中的SQl语句 SQl实例 建立存储过程 -- 建立存储过程 CREATE or replace PROCEDURE UPDATE_AGENCY ...
- 这可能是前端处理excel最好的工具了
大家好,我是程序视点的小二哥! 今天小二哥要分享的是一个纯前端实现读取和导出excel文件的工具库:ExcelJS ExcelJs 简介 功能十分简单: 读取,操作并写入电子表格数据和样式到 XLSX ...
- 磁盘问题和解决: fsck,gdisk,fdisk等
错误: Resize inode not valid 对于gpt分区的硬盘一般fsck只能检查分区, 不能用于检查整个硬盘, 但是如果对硬盘设备运行时遇到这样的错误 $ sudo fsck -n /d ...
- VMware 备份操作系统
在VMware 中备份方式有两种:快照和克隆. 快照:又称还原点,就是保存在拍快照时系统的状态,包含所有内容.在之后的使用中,随时都可以恢复.[短期备份,需要频繁备份时,使用该方法.操作的虚拟系统一般 ...
- vscode c++食用指南
准备 配置环境为机房的 win10. 首先你需要下载 vscode. 可以从官网下载:https://code.visualstudio.com/Download 配置编译c++ 下载完之后安装好,界 ...
- 【日常踩坑】修复 chrome 打不开微信或者部分第三方应用内链接
目录 默认浏览器为 chrome 时,打不开微信或者部分第三方应用内链接(或者没有反应) 修复问题:卸载 KGChromePlugin 参考资料 默认浏览器为 chrome 时,打不开微信或者部分第三 ...
- 9k+ Star 简洁好用的开源 Linux 运维管理面板
如果你的公司需要进行服务器运维管理,那么运维管理面板就是一个不可或缺的需求.因为并非每一位运维工程师都能在命令行下游刃有余,不需要借助辅助工具就能确保服务器安全.流畅运行.尤其是对于刚刚踏入运维领域的 ...
- 关于MySQL获取自增ID的几种方法
1. Select Max(id) From Table; 通过取表字段最大值的方式来获取最近一次自增id 缺点: 这种方法在多人操作数据库的软件上不可靠, 举个例子, 你刚插入一条记录. 当你在查询 ...