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操作(暂存,回退,绑定远程等),看这一篇就够了的更多相关文章

  1. Git学习(三)——暂存区、远程仓库、增删改管理

    一.工作区和暂存区 工作区(Working Directory) 就是在你的电脑里能看到的目录 版本库(Repository) 工作区中的一个隐藏目录.git,这个不算工作区,而是Git版本库.Git ...

  2. git中的版本库,暂存区和工作区

  3. Git入门看这一篇就够了! (转)

    Git 的三种状态 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed):数据已经安全的保存在本地数据库中. 已修改(modified):已修改表示修改了文件,但还没保存到数据 ...

  4. 【Git】三、工作区、暂存区、版本库

    一.基础概念 工作区:电脑中可以看到的目录,为电脑中的项目文件 暂存区:暂存修改的地方 版本库:存放项目的各个版本文件 二.详细介绍 工作区为我们工作所使用的目录,在工作区我们对项目文件进行增删改查. ...

  5. Git 看这一篇就够了

    上一篇讲 Git 的文章发出来没想到效果特别好,很多读者都要求继续深入的写. 那今天齐姐简单讲下 Git 的实现原理,知其所以然才能知其然:并且梳理了日常最常用的 12 个命令,分为三大类分享给你. ...

  6. [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了

    @ 目录 *本文说明 请大家务必查看 前言 首先介绍一下主角:Hexo 什么是 Hexo? 环境准备 详细版 入门:搭建步骤 安装git: 安装node: 安装Hexo: 进阶:hexo基本操作 发布 ...

  7. Git让你从入门到精通,看这一篇就够了!

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

  8. Git让你从入门到精通,看这一篇就够了

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

  9. Git时光机穿梭之工作区和暂存区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...

  10. git命令--git checkout 之 撤销提交到暂存区的更改

    SYJ@WIN-95I6OG3AT1N /D/gitlab/ihr-kafka-produce (master) $ git status [由于工作区文件被修改了,所以显示为红色] On branc ...

随机推荐

  1. 【转载】Linux虚拟化KVM-Qemu分析(八)之virtio初探

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...

  2. 在英特尔 CPU 上微调 Stable Diffusion 模型

    扩散模型能够根据文本提示生成逼真的图像,这种能力促进了生成式人工智能的普及.人们已经开始把这些模型用在包括数据合成及内容创建在内的多个应用领域. Hugging Face Hub 包含超过 5 千个预 ...

  3. 沃罗诺伊图 (Voronoi diagram)

    沃罗诺伊图 (Voronoi diagram) Introduction: what is voronoi diagram? 沃罗诺伊图 (Voronoi diagram),取名自俄罗斯数学家乔治·沃 ...

  4. Cilium系列-9-主机路由切换为基于 BPF 的模式

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  5. hive grouping set

    reference https://www.cnblogs.com/erlou96/p/13564191.html data-demo 2015-03,2015-03-10,cookie1 2015- ...

  6. centos7安装influxdb2

    前言 InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读.高性能写.高效存储与实时分析等,广泛应用于DevOps监控.IoT监控.实时分析等场景. 服务器 ...

  7. redis集群:MASTER aborted replication with an error: NOAUTH Authentication required.

    发现个问题:redis集群所在服务器,磁盘空间很快就被占满,使用 "du -sh *"查看每个文件夹的大小,发现redis集群三个从节点的日志文件占用空间很大. 下面记录问题排查及 ...

  8. 3.0 Python 迭代器与生成器

    当我们需要处理一个大量的数据集合时,一次性将其全部读入内存并处理可能会导致内存溢出.此时,我们可以采用迭代器Iterator和生成器Generator的方法,逐个地处理数据,从而避免内存溢出的问题. ...

  9. Android13深入了解 Android 小窗口模式和窗口类型

    Android13深入了解 Android 小窗口模式和窗口类型 小窗模式,作为一种在移动设备上的多任务处理方式,为用户带来了便捷和高效的体验,尤其在一些特定场景下,其价值愈发凸显.以下是为什么需要小 ...

  10. [Qt开发探幽(二)]浅谈关于元对象,宏和Q_ENUM

    目录 [Qt开发探幽(二)]浅谈关于元对象,宏和Q_ENUM 前言 一.元对象 但是 二.关于Q_OBJECT等宏属性 1.元对象系统 2.信号与槽 3.属性系统 三.关于Q_ENUMS 1.将其注册 ...