git使用小记

1. 基本操作

全局配置:

 git config --global user.name xx 

 git config --global user.email xxx 

 

初始化一个仓库:

 git init 

 

添加:

 git add "file1.txt" 

 git commit -m "添加文件1" 

 

比较:分别列出每个文件的当前内容与其最近一次提交的差异

 git diff file1 file2 file3 ,工作区和暂存区的比较

 git diff --cached file1 file2 file3 ,暂存区和仓库比较

 

查看某次提交做的修改:

 git show ${commit_id} 

 

创建新仓库 / 将已有未被管理的项目加入到某个仓库 / 将已有已被管理的项目加入到另一个仓库:

 

 

2. 分支管理

创建分支: git branch 新分支名 [源分支名] 

删除分支: git branch -d 分支名 

切换分支: git checkout 分支名 ,或   git checkout -b 新分支名 [源分支名] ,后者为从指定源分支(默认为master)创建并切换分支

查看分支(假设远程和本地库中都只有master分支,远程主机名在本地被取为origin):

  • 查看本地: git branch ,得到master
  • 查看远程分支: git branch -r ,得到origin/master
  • 查看本地和远程的所有分支: git branch -a ,得到master和remotes/origin/master两条记录

取回远程主机分支: git fetch 远程主机名 [分支名] ,如git fetch origin master。若没有指定分支名则取回所有分支的更新;取回分支只是将远程主机版本库的更新取回,对本地分支没影响;所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取

合并分支: git merge [--no-ff] 被合并分支名 ,将指定分支合并到当前分支。不含--no-ff参数时,Git执行快进式合并,直接将当前分支指向被合并分支;带该参数时会执行正常合并,在Master分支上生成一个新节点。

关于创建与合并分支的原理,可见创建与合并分支-廖雪峰、Git分支管理策略-阮一峰

 

3. 查看状态

命令: git status 

查看commit记录: git log [--pretty=oneline]  ,这里加后面参数可以减少不相关信息的输出,从而输出每次修改的commit_id和注释。如 8ebc1882fa63e8048a8ad983e9de7fa413f54580 add file test.txt 

查看commit和reset等记录: git reflog ,其可查看所有分支的所有操作记录(包括commit和reset的操作及已经被删除的commit记录,git log则不能察看已经删除了的commit记录),其会列出每种操作完后的commit_id串的前几位。

查看提交图: git log --graph --pretty=oneline --abbrev-commit ,结果示例:

 

4. 版本回退

(参考自Git版本回退操作)

 git reset --hard commit_id 

  • 这里版本号可以不全写会根据已写的自动查找;
  • 除了用commit_id外,也可用特殊标记:Git用 HEAD 表示当前分支的最新版本、 HEAD^ 表示上版本、 HEAD^^ 表示上上版本、 HEAD~100 表示往上100个版本以此类推
  • 回退后,HEAD的指向也变成当前的最新版,可能造成往历史版本回滚后滚不回真正的最新版,如对于版本号为1到10的十个版本,回滚到版本5后HEAD就是版本5了此时滚不回10。解决:可以通过git reflog查看版本10提交时的commit_id从而滚到最新版。

 

 

5. 远程管理

(参考自Git远程操作详解-阮一峰)

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区(即stage或index)的概念。

git clone

git fetch

git pull

git push

git remote

git clone 

 git clone <版本库的网址> [<本地目录名>] ,从远程主机克隆一个版本库。

  • 该命令会在本地主机生成一个目录,不指定名称的话与远程主机的版本库同名;
  • Git要求每个远程主机都必须指定一个主机名,默认为origin,可以通过-o参数指定,如 git clone -o jQuery https://github.com/jquery/jquery.git ,此外可以通过 -b 指定克隆版本库的指定分支。
  • git clone还支持HTTP(s)、FTP、SSH、file等协议,如 git clone file:///opt/git/project.git 

git fetch

 git fetch 用法见上面的分支管理部分。

git pull

 git pull <远程主机名> <远程分支名>[:<本地分支名>] :从指定远程主机的某个分支拉取更新并合并到指定的本地分支,如 git pull origin next:master 将origin/next分支更新拉取并合并到本地master分支。

  • 若未指定本地分支时默认为当前分支,如 git pull origin next 取回origin/next分支并与当前分支合并,相当于 git fetch origin/next、git merge origin/next两步操作。
  • 若当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名,如git pull origin
    • 在git clone时所有本地分支默认与远程主机的同名分支,建立追踪关系,也即本地的master分支自动"追踪"origin/master分支。
    • Git也允许手动建立追踪关系,如git branch --set-upstream master origin/next指定master分支追踪origin/next分支。
  • 若当前分支只有一个追踪分支,连远程主机名都可以省略,如 git pull  

git push

 git push <远程主机名> <本地分支名>:<远程分支名> :将本地分支的更新,推送到远程主机,如 git push origin master:next 将本地master分支推送到远程origin主机的next分支上。

  • 省略远程分支名表示将本地分支推送到与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。如 git push origin master 将本地的master分支推送到origin主机的master分支。
  • 省略本地分支名表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。如 git push origin :master 等同于 git push origin --delete master ,表示删除origin主机的master分支。
  • 若当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。如 git push origin 将当前分支推送到origin主机的对应分支。
  • 若当前分支只有一个追踪分支,那么主机名都可以省略。如 git push 
  • 若当前分支与多个主机存在追踪关系,则可使用-u选项指定一个默认主机,如 git push -u origin master 将本地的master分支推送到origin主机的master分支,同时指定origin为默认主机并将两分支关联起来,在以后的推送或者拉取时就可以不加任何参数使用git push了。 

git remote

  git remote  :管理远程主机名

  • 不带参数时,列出所有远程主机
  • -v参数,列出所有远程主机及网址
  •  git remote show <主机名>  ,查看某远程主机信息
  •  git remote add <主机名> <网址>  ,添加远程主机
  •  git remote rm <主机名>  ,删除远程主机
  •  git remote rename <主机名>  ,重命名远程主机

  

GtiHub不适合作为个人不愿公开的项目的托管,可以使用Gitlab。

为Gitlab账号添加SSH key并使用Git连接Gitlab(为GitLab帐号添加SSH keys并连接GitLab):有两种方式从Gitlab上clone项目,http和ssh。

  • 前者每次clone、push等操作都需要用户输入账号的用户名和密码,比较麻烦;
  • 可以使用后者并配置SSH Key来避免这种麻烦。其实本质上使用SSH也需要输入账号和相应密码,但我们通过生成并添加SSH Key使得在clone等操作时计算机帮我们做了身份验证的事。(且由于生成了公钥和私钥并把公钥放到了Gitlab上,它们相当于一对锁和钥匙,在连接时进行公钥和私钥的匹配,所以用SSH方式不需要知道账号的密码了,在生成SSH Key时提示设置的密码也不是账号的密码,而是push操作时的密码,可以不设置,这样以后clone等操作都不需要输入密码了)

6. 其他

修改已经commit的comment

修改最近一次提交:

 git commit --amend  可以修改最近一次提交的注释信息。详情参阅:https://stackoverflow.com/questions/179123/how-to-modify-existing-unpushed-commits

修改指定某次的历史提交:

https://xiewenbo.iteye.com/blog/1285693

 

转载于:https://www.cnblogs.com/z-sm/p/4203845.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINUX内核之普通自旋锁

LINUX内核之普通自旋锁 CopyLeft by ICANTH&#xff0c;I Can do ANy THing that I CAN THink&#xff01;~ Author&#xff1a;WenHui&#xff0c;WuHan University&#xff0c;2012-6-15 PDF版阅读地址&#xff1a;http://www.docin.com/p1-424285718.html 普通自旋锁 自旋锁…

MFC COMBO-BOX最详细教程

找了好多&#xff0c;这是讲的最清楚的&#xff0c;与大家共享&#xff01; 转&#xff1a;https://blog.csdn.net/fym0121/article/details/7515862 当你只需从一列对象中选出一个时&#xff0c;使用COMBO BOX是一个好主意&#xff0c;因为它节省空间。这篇文章讲述了如何使…

uboot源码——主Makefile的分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;u-boot Makefile完全解读_williamwang2013的博客-CSDN博客 参考博客&#xff1a;U-boot主Makefile分析_XiaoBaWu的博客-CSDN博客 参考博客&#xff1a;U-boot配置及编译阶段…

Designing Virtual Connect for vSphere 5.x

Designing Virtual Connect for vSphere 5.x如何在 HP C7000刀笼使用VC以满足vSphere 5.x 英文视频连接如下&#xff1a;http://professionalvmware.com/2013/05/vbrownbag-follow-up-designing-virtual-connect-for-vsphere-with-joe-clark-elgwhoppo/1&#xff1a;首先介绍一…

VMware vCenter Converter 关闭SSL加密,提高35-40%性能

VMware vCenter Converter 关闭SSL加密,提高35-40%性能原文&#xff1a;http://www.vmwarearena.com/2013/07/improving-transfer-rate-of-p2v-and-v2v.htmlVMware vCenter Converter Standalone 5.0 is a free tool from VMware to easily perform P2V(Physical to virtual co…

图像拼接算法及实现

第一章 绪论 1.1 图像拼接技术的研究背景及研究意义 图像拼接(image mosaic)是一个日益流行的研究领域&#xff0c;他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式&#xff0c;通过对齐一系列空间重叠的图像&#xff0c;构…

程序员,你还在 Select * 吗?

应用程序慢如牛&#xff0c;原因多多&#xff0c;可能是网络的原因、可能是系统架构的原因&#xff0c;还有可能是数据库的原因。 那么如何提高数据库SQL语句执行速度呢&#xff1f;有人会说性能调优是数据库管理员&#xff08;DBA&#xff09;的事&#xff0c;然而性能调优跟程…

学习笔记-记ActiveMQ学习摘录与心得(二)

上个周末被我玩过去了&#xff0c;罪过罪过&#xff0c;现在又是一个工作日过去啦&#xff0c;居然有些烦躁&#xff0c;估计这几天看的东西有点杂&#xff0c;晚上坐下来把自己首要工作任务总结总结。上篇学习博客讲了ActiveMQ的特性及安装部署&#xff0c;下面先把我以前启动…

谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)

C#支持单继承&#xff0c;说到继承就不得不说new&#xff0c;virtual和override这三个关键词&#xff0c;灵活正确的使用这三个关键词&#xff0c;可以使程序结构更加清晰&#xff0c;代码重用性更高。 以下是msdn中对new&#xff0c;virtual和override的定义&#xff1a; …

unsigned char s1 : 2的用法

#include<stdio.h> #include<stdlib.h> //默认按照四字节对齐 //#pragma pack(1) union V {struct X{unsigned char s1 : 2;unsigned char s2 : 3;unsigned char s3 : 3;} x;unsigned char c; } v; //#pragma pack()int main(void) {v.c 100;//对应的二进制数字是…

juc线程池原理(六):jdk线程池中的设计模式

一、jdk中默认线程池中的代理模式 单例类线程池只有一个线程&#xff0c;无边界队列&#xff0c;适合cpu密集的运算。jdk中创建线程池是通过Executors类中提供的静态的方法来创建的&#xff0c;其中的单例类线程池的方法如下&#xff1a; public static ExecutorService newSin…

Code First :使用Entity. Framework编程(6) ----转发 收藏

Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置&#xff0c;创建过程和种子数据 In previous chapters you have seen how convention and configuration can be used to affect the model and the resulting database schema.…

计算多个文档之间的文本相似程度

首先我们上代码&#xff1a; from sklearn.feature_extraction.text import CountVectorizer corpus [ UNC played Duke in basketball, Duke lost the basketball game, I ate a sandwich ] vectorizer CountVectorizer(binaryTrue,stop_wordsenglish)#设置停用词为英语&…

双边滤波

双边滤波 高斯滤波是最常用的图像去噪方法之一&#xff0c;它能很好地滤除掉图像中随机出现的高斯噪声&#xff0c;但是在之前的博客中提到过&#xff0c;高斯滤波是一种低通滤波&#xff08;有兴趣的点击这里&#xff0c;查看之前的博客&#xff09;&#xff0c;它在滤除图像中…

用SQL语句更改数据库名,表名,列名

参考SQL Server联机丛书的 sp_renamedb与sp_rename一、更改数据库名sp_renamedb更改数据库的名称。语法sp_renamedb [ dbname ] old_name ,[ newname ] new_name 参数[ dbname ] old_name 是数据库的当前名称。old_name 为 sysname 类型&#xff0c;无默认值…

Gabor滤波器原理

一、什么是Gabor函数&#xff08;以下内容含部分翻译自维基百科&#xff09; 在图像处理中&#xff0c;Gabor函数是一个用于边缘提取的线性滤波器。Gabor滤波器的频率和方向表达同人类视觉系统类似。研究发现&#xff0c;Gabor滤波器十分适合纹理表达和分离。在空间域中&#x…

Linux中的MAN命令

学习Linux的同学&#xff0c;都会使用man来查阅一些命令的帮助信息&#xff0c;常见的使用方法就是“man 命令名称”这样简单的格式。本文就对man命令简要介绍一下。 l man命令的章节 man就是manual的缩写&#xff0c;用来查看系统中自带的各种参考手册&#xff0c;但是手册页分…

全局曝光和卷帘曝光的区别

全局曝光和卷帘曝光是常见的相机曝光方式。一般来说&#xff0c;CCD相机是全局曝光&#xff0c;而CMOS相机则存在卷帘曝光。那么&#xff0c;这两种方式孰优孰劣呢&#xff1f;或者说&#xff0c;他们两者的差别在哪里呢&#xff1f;那么&#xff0c;先从两者的定义说起。 全局…

Titanium 列表显示TableView

效果&#xff1a; Titanium中列表显示需要创建TableView var tableView Ti.UI.createTableView({style: Ti.UI.iPhone.TableViewCellSelectionStyle.NONE //TableView样式}); TableView的每一个行叫做TableViewRow 设置TableViewRow的hasChild为true便可显示这样的效果&#x…

discuz x2.5插件开发傻瓜图文教程,用demo说话

2019独角兽企业重金招聘Python工程师标准>>> 刚刚接触DZ的插件开发&#xff0c;记个傻瓜图文教程&#xff0c;一是分享给初学者&#xff0c;二是方便自己以后回忆。 本篇文章适合人群&#xff1a;有一定的PHP开发经验&#xff0c;想通过一个简单明了的demo快速了解…