【本博客所有关于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 ...
随机推荐
- EaselJS 源码分析系列--第一篇
什么是 EaselJS ? 事儿还得从 Flash 说起,因为我最早接触的就是 Flash, 从 Flash 入行编程的 Flash 最早的脚本是 Actionscript2.0 它的 1.0 我是没 ...
- linux top中 VSS,RSS,PSS,USS 4个字段的解读
参考文章:linux中top命令 VSS,RSS,PSS,USS 四个内存字段的解读
- 2022-1-11 控件学习4 ItemControl、ListBox、ComboBox
ItemControl itemControl前台 ItemControl后台 ItemControl一般是竖直排列的,如果需要很想排列需要使用,也可以使用 UniformGrid Columns=& ...
- Vue: 在vscode中添加vue的代码片段
创建vue文件模板 打开vscode,文件–>首选项->用户代码片段,在弹出的搜索框中输入vue,回车 删除原内容,将如下内容粘贴 { "Print to console&quo ...
- ubuntu 安装sublime
Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key ad ...
- SpringCloud-Hystrix服务熔断与降级工作原理&源码
先附上Hystrix源码图 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用 ...
- [etcd]简介与安装
简介 etcd是一个采用Raft协议实现强一致性的分布式键值数据库,它提供了一种可靠的方式存储需要被分布式系统或机器集群访问的数据. 常见使用场景:服务注册与发现.键值对存储.消息发布和订阅.分布式锁 ...
- python实现创建一个银行类,这个类实现了两个方法,第一个方法可以将用户信息写入到文件中,第二个方法可以读取文件中的用户信息出来
class bank: def user_info(self): a=input('请输入用户信息:') # 不写encoding = 'utf-8'中文会乱码 with open('info.txt ...
- WPF实现Element UI风格的日期时间选择器
背景 业务开发过程中遇到一个日期范围选择的需求,和Element UI的DateTimePicker组件比较类似,由两个日历控件组成,联动选择起始时间和结束时间. 问题 WPF中提供了一个DatePi ...
- Web项目如何配置Eslint
介绍 ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误.在很多地方它都与 JSLint 和 JSHint 类似, ...