当前位置: 首页 > 编程日记 > 正文

Git使用指南


1.创建目录

$ git config --global user.name "Your Name Comes Here" 

$ git config --global user.email you@yourdomain.example.com 

$ git config --list 查看相关信息 

$ git init 

如果作为 Server 存在,那么可以忽略工作目录,以纯代码仓库形式存在。 

$ git --bare init 

可以在~/.gitconfig设置别名 

[alias] 
st = status 
ci = commit -a 
co = checkout

2.文件操作

$ git add . 

$ git add file1 file2 file3 

$ git add -u 

$ git add -p // 为你做的每次修改,Git将为你展示变动的代码,并询问该变动是否应是下一次提交的一部分。回答“y”或者“n”。也有其他选项,比如延迟决定:键入“?”来学习更多。 

$ git rm file1 file2 file3 

$ git mv file1 file2 

3.提交更改

$ git commit -a -m ' ' 

$ git commit --amend -a -m ' ' // 修改上一次的信息,不作为新的提交 

$ git stash // 保存当前草稿,便于切换分支
$ git stash pop
$ git stash apply
$ git stash list
$ git stash apply stash@{1}
$ git stash clear

4.撤销更改

$ git reset HEAD file1 // 取消暂存区的文件快照(即恢复成最后一个提交版本),这不会影响工作目录的文件修改。 

$ git reset --hard HEAD^ // 将整个项目回溯到以前的某个版本,可以使用 "git reset"。可以选择的参数包括默认的 "--mixed" 和 "--hard",前者不会取消工作目录的修改,而后者则放弃全部的修改。该操作会丢失其后的日志 


$ git checkout -- file1 // 使用暂存区快照恢复工作目录文件,工作目录的文件修改被抛弃。 

$ git checkout HEAD^ file1 // 直接 "签出" 代码仓库中的某个文件版本到工作目录,该操作同时会取消暂存区快照。 

$ git checkout "@{10 minutes ago}" // 直接 "签出" 10分钟之前代码仓库中的某个文件版本到工作目录,该操作同时会取消暂存区快照。 

$ git checkout "@{5}" // 直接 "签出" 倒数第五次保存的某个文件版本到工作目录,该操作同时会取消暂存区快照。 

$ git revert SHA1_HASH // 还原特定哈希值对应的提交。该还原记录作为一个新的提交。 

5.查看历史纪录或者当前状态

$ git log 

$ git log -p 

$ git log --stat --summary 

$ git log V3..V7 //显示V3之后直至V7的所有历史记录 

$ git log V3.. //显示所有V3之后的历史记录。注意<since>..<until>中任何一个被省略都将被默认设置为HEAD。所以如果使用..<until>的话,git log在大部分情况下会输出空的。 

$ git log –since=”2 weeks ago” //显示2周前到现在的所有历史记录。具体语法可查询git-ref-parse命令的帮助文件。 

$ git log stable..experimental //将显示在experimental分支但不在stable分支的历史记录 

$ git log experimental..stable //将显示在stable分支但不在experimental分支的历史记录 

$ git log -S'你要找的内容',就可以从全部的历史纪录,瞬間找到你要找的东西 


$ git blame FILE // 标注出一个指定的文件里每一行内容的最后修改者,和最后修改时间。 

$ git diff // 这个命令只在git add之前使用有效。如果已经add了,那么此命令输出为空 

$ git diff –cached // 这个命令在git add之后在git commit之前有效。 

$ git diff "@{yesterday}" // 比较当前和昨天的内容 

$ git status // 这个命令在git commit之前有效,表示都有哪些文件发生了改动 


$ git show 5b888 // 使用git show再加上述的commit名称来显式更详细的commit信息 

$ git show master // 显示分支信息 

$ git show HEAD // 使用HEAD字段可以代表当前分支的头(也就是最近一次commit) 

$ git show HEAD^ //查看HEAD的父母的信息, 可以使用^表示parent 

$ git show HEAD^^ //查看HEAD的父母的父母的信息 

$ git show HEAD~4 //查看HEAD上溯4代的信息 


$ git tag V3 5b888 //以后可以用V3来代替复杂的名称(5b888…) 

$ git show V3 

$ git branch stable V3 //建立一个基于V3的分支 

$ git grep “print” V3 //在V3中搜索所有的包含print的行 

$ git grep “print” //在所有的历史记录中搜索包含print的行 


6.协作操作


$ git clone git://server/path/to/files // Git deamon 

$ git clone your.computer:/path/to/script  or git clone ssh://car.colorado.edu/home/xxx ./xxxxx // SSH
// SSH

$ git pull 

$ git push // 在将代码提交(push)到服务器之前,首先要确认相关更新已经合并(merge)到主分支(master)。还应该先从服务器刷新(pull)最新代码,以确保自己的提交不会和别人最新提交的代码冲突。 

如果想在merge前先查看更改: 

$ git fetch /home/bob/myrepo master:bobworks //此命令意思是提取出bob修改的代码内容,然后放到我(rocrocket)工作目录下的bobworks分支中。之所以要放到分支中,而不是master中,就是要我先仔仔细细看看bob的开发成果,如果我觉得满意,我再merge到master中,如果不满意,我完全可以直接git branch -D掉。 

$ git whatchanged -p master..bobworks //用来查看bob都做了什么 

$ git checkout master //切换到master分区 

$ git pull . bobworks //如果我检查了bob的工作后很满意,就可以用pull来将bobworks分支合并到我的项目中了 

7.分支管理

$ git branch: 查看当前分支 

$ git checkout -b/branch experimental: 创建新分支 

$ git checkout experimental: 切换到另一分支 

$ git merge experimental:合并分支 

$ git branch -d experimental:删除分支, 使用的是小写的-d,表示“在分支已经合并到主干后删除分支”。 

$ git branch -D experimental:删除分支, 表示“不论如何都删除分支”,-D使用在“分支被证明失败” 

8.补丁工作

git format-patch:当你想给一个开源项目(例如Rails)提交一段代码的时候,或者你想给小组成员展示一段你并不想提交的代码,那么你还是需要 patch的,Git的'format-patch'命令良好的支持了这个功能。 
第一,利用branch命令 创建一个分支; 
第二,修改你的代码; 
第三,在该分支上提交你的修改; 
第四,使用'git format-patch'命令来生成一个patch文件,例如:'git format-patch master --stdout > ~/Desktop/tmp.patch'就是将工作分支与master主干的不同,存放在'~/Desktop'文件夹下,生成一个叫做 tmp.patch的文件(另一种简单的版本是利用diff命令,例如'git diff ..master > ~/Desktop/tmp.patch'),这样就生成了patch文件。那么别人就可以使用'git apply'命令来应用patch,例如'git apply ~/Desktop/tmp.patch'就是将patch打在当前的工作分支上 

9.仓库维护

$ git fsck: 不加–full参数的情况下,这个命令一般会以非常低廉的代价确保仓库在一个不错的健康状态之中。 

$ git count-objects: 统计有多少松散的对象,没有 repack 的对象消耗了多少硬盘空间。 

$ git gc: 在本地仓库进行 repack,并进行其他日常维护工作。 

$ git filter-branch --tree-filter `rm top/secret/file` HEAD //在所有记录中永久删除某个文件 

$ git rebase -i HEAD~10 // 后10个提交会出现在你喜爱的$EDITOR。通过删除行来移去提交。通过为行重新排序来为提交重新排序。用“edit”来替换“pick”来标志一个提交可修改。用“squash”来替换“pick”来将一个提交和前一个合并。 

10.错误查询

刚刚发现程序里有一个功能出错了,即使你过去经常提交变更,Git还是可以精确的找出问题所在: 

$ git bisect start 

$ git bisect bad SHA1_OF_BAD_VERSION 

$ git bisect good SHA1_OF_GOOD_VERSION 

Git从历史记录中检出一个中间的状态,在这个状态上测试功能,如果还是错误的: 

$ git bisect bad 

如果可以工作了,则把"bad"替换成"good"。 Git会再次帮你找到一个以确定的好版本和坏版本之间的状态,经过一系列的迭代,这种二进制查询会帮你找到导致这个错误的那次提交。一旦完成了问题定位的调查,你可以返回到原始状态,键入: 

$ git bisect reset 

不需要手工测试每一次改动,执行如下命令可以自动的完成上面的搜索: 

$ git bisect run COMMAND 

Git使用指定命令(通常是一个一次性的脚本)的返回值来决定一次改动是否是正确的:命令退出时的代码0代表改动是正确的,125代表要跳过对这次改动的检查,1到127之间的其他数值代表改动是错误的。返回负数将会中断整个bisect的检查。 


----------------------------------------------------------------------------------------------------------- 

将 Current working directory 记为 工作目录(1) 

将 Index file 记为 暂存区(2) 

将 Git repository 记为 代码仓库(3) 




他们之间的提交层次关系是 (1) -> (2) -> (3) 

git add完成的是(1) -> (2) 

git commit完成的是(2) -> (3) 

git commit -a两者的直接结合 




从时间上看,可以认为(1)是最新的代码,(2)比较旧,(3)更旧 

按时间排序就是 (1) <- (2) <- (3) 




git diff得到的是从(2)到(1)的变化 

git diff –cached得到的是从(3)到(2)的变化 

git diff HEAD得到的是从(3)到(1)的变化
git localremote

git workintree

转载于:https://www.cnblogs.com/sunleecn/archive/2011/12/01/2270915.html

相关文章:

【Linux】Linux简单操作之安装、使用tomcat

tomcat安装 1、下载tomcat到指 文件夹 &#xff1a; home / local 中 2、将文件见解压到文件夹 &#xff1a;usr / local 当中 代码实现 &#xff1a; tar -zxvf -C /usr/local tomcat使用 1、进入到bin目录下&#xff0c;找到文件startup.sh 注&#xff1a; 是tomcat文件…

男人约会动机大揭秘。

被人约是好事&#xff0c;但也要眼明心亮&#xff0c;男人约会动机大揭秘。 男人约会动机大揭秘&#xff1a; 1&#xff1a;这是一个有诚意的开始&#xff0c;表明他是早有计划和你约会的。至少&#xff0c;也说明他有相当的社交礼貌。 2&#xff1a;这个男人可能只是一时寂寞了…

WebService之soap类型的服务和rest类型的服务

1.引言 WebService顾名思义就是web服务&#xff0c;web服务主要有两种&#xff0c;一种是基于soap类型的服务&#xff0c;一种是基于rest类型的服务&#xff0c;其中soap类型的服务有两种版本&#xff0c;一种是soap1.1版本&#xff0c;一种是soap1.2版本&#xff0c;soap服务类…

【二级java】二叉树序列

https://www.cnblogs.com/caozengling/p/5318504.html

Qt/Linux 下的摄像头捕获(Video4Linux2)

Linux下使用各种设备是一件令人兴奋的事情。在Unix的世界里&#xff0c;用户与硬件打交待总是简单的。最近笔者在Linux下搞了摄像头的开发&#xff0c;有一点感想发于此处。 Linux中操作一个设备一般都是打开&#xff08;open&#xff09;&#xff0c;读取&#xff08;read&…

ubuntu chm文档阅读器

一,chm阅读器名称 KchmViewer 安装方法 sudo apt-get install kchmviewer 使用 kchmviewer #非root用户可以直接使用 转载于:https://www.cnblogs.com/jiangfeilong/p/11184226.html

c++语言中,vector容器与list容器的区别和联系?_百度知道

C STL 提供了3个序列容器 &#xff1a;vector, deque, list vector 中的元素是顺序存放的&#xff0c;所以随机访问很快,但是要插入和删除&#xff0c;这个时间复杂度就很高了&#xff0c;vector初始化时有一个capacity,如果元素个数超出capacity,那vector就会重新分配一个新的…

《Java技术》第三次作业--面向对象——继承、抽象类、接口

1.阅读下面程序&#xff0c;分析是否能编译通过&#xff1f;如果不能&#xff0c;说明原因。应该如何修改&#xff1f;程序的运行结果是什么&#xff1f;为什么子类的构造方法在运行之前&#xff0c;必须调用父 类的构造方法&#xff1f;能不能反过来&#xff1f; class Grandp…

《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

新手入门&#xff1a;C/C中枚举类型(enum)   如果一个变量你需要几种可能存在的值&#xff0c;那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。   举个例子来说明一吧&#xff0c;为了让大家更明白一点&…

【二级java】 二分法查找

例题1 &#xff1a;对长度为n的线性表进行顺序查找&#xff0c;在最坏情况下所需要的比较次数为______。 解析&#xff1a; 如果线性表中的第一个元素就是被查找元素&#xff0c;则只需做一次比较就查找成功 查找次数为1 如果线形表中不存在该数据&#xff0c;查找次数为n 例…

List和ObservableCollection的相互转化

在WPF &#xff0c; silverlight &#xff0c;WP7中经常会用到List<T>和ObservableCollection<T>。这里简单讲一下他们之间的相互转换。 1.List<T>的简单介绍&#xff1a; List<T>代表的是强类型的Ojbect集合&#xff0c;可以通过索引访问并且提供了查…

获取局域网打印机列表

/// <summary> /// 获取局域网打印机列表 /// </summary> /// <param name"DefaultPrinter">默认打印机</param> /// <returns>局域网中所有打印机列表</returns> public static List&…

戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码)

关于Graphics也有了基本了解下面想说的的是学这个东东干什么呢&#xff0c;到底如何应用目前常见应用1、验证码&#xff08;参照网上的&#xff09;2、打印排版&#xff08;会提到关于条形码大小设置&#xff09;3、自定义控件 一、验证码 1 class ValidateCode2 {3 …

转载:HBuilder常用快捷键

原文&#xff1a;http://www.cnblogs.com/DCL1314/p/8625110.htmlHBuilder常用快捷键1.文件新建 Ctrl N 关闭 Ctrl F4 全部关闭 Ctrl Shift F4 属性 Alt Enter 2.编辑激活代码助手 Alt / 激活快捷键视图 Ctrl Shift L开启关闭注释整行 Ctrl / 开启关闭注释已选内容 Ct…

java源程序结构

JAVA培训 一个完整的java源程序应该包括下列部分&#xff1a;  package语句&#xff1b; //该部分至多只有一句&#xff0c;必须放在源程序的第一句  import语句&#xff1b; /*该部分可以有若干import语句或者没有&#xff0c;必须放在所有的          类定义之前…

【二级java】排序技术

例题1 &#xff1a;希尔排序属于下列哪种排序法 解析&#xff1a; 希尔排序法的基本思想是&#xff1a; 将整个无序序列分割成若干小的子序列分别进行插入排序&#xff0c;所以属于插入排序 例题2 &#xff1a; 在下列几种排序方法中&#xff0c;要求内存量最大的是 解析&am…

HDU 1257 - 最少拦截系统 ( LIS / 贪心 )

题目 现在有一种拦截系统&#xff0c;第一发拦截可以是任意高度&#xff0c;但是之后的拦截高度不能比上次高。为了拦截下所有的炮弹&#xff0c;最少需要准备几套拦截系统&#xff1f; 思路 可能是语文没学好吧&#xff0c;一开始被题意卡了一下。&#xff08;而且题目连数据范…

python练习:猜价钱小游戏

#猜价钱 trueprice 202 price input("Please guess the price:") while (int(price) ! trueprice):if(int(price) > trueprice):price input("Your price is higher,Please try again:")else:price input("Your price is lower,Please try aga…

android系统短信库的一些用法

1、查询所有短信&#xff0c;按发件人进行分组Cursor mCursor managedQuery(Uri.parse("content://sms"),new String[] {"_id,address,date,read,status,type,body,count(address) as " "totleCount from (select _id,substr(address,4) as address,…

【二级java】操作题知识点积累

1、java中^代表亦或&#xff08;相同为0&#xff0c;不同为1&#xff09; 2、使用下标直接访问字符串中字符的方法 string.charAt&#xff08;&#xff09; 3、从主方法派出异常给jvm时 使用的是 throws 而不是 throw 4、使用InputStreamReader 、BufferedReader时需要使用的包…

Utilize Sql Tuning Advisor from Script

Sql Tuning Advisor是10g以后出现的一个十分有用的调优工具&#xff0c;大多数情况下我们可以通过dbconsole或者Grid Control的web界面调用SQL Advisor&#xff1b;但如果系统中没有配置dbconsole或者Grid Control的话&#xff0c;我们则需要通过手动调用DBMS_SQLTUNE PL/SQL程…

Isight 命令行运行任务

说明书参考:https://abaqus-docs.mit.edu/2017/English/DSSIMULIA_Established.htm 不一定对版本。但是大部分还可以。 不对的可以在命令里敲help 首先&#xff0c;说明书里的命令行客户端默认加入环境变量。 实测win/linux安装没有环境变量。可以自行添加也可找到目录自行运行…

【二级java】软件工程基础

1、软件工程三要素 &#xff1a; 方法 工具 过程 2、软件工程中根本上来说是为了研究软件开发技术 3、软件工程的定义 &#xff1a; 应用于计算机软件的定义、开发维护的一整套方法、工具、文档、实践标准和工序 4、软件危机的表现 &#xff1a; 软件的生命周期&#xff1a;…

ASP.NET WebAPI 11 参数验证

在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参数验证结果. public abstract class ApiController : IHttpController, IDisposable{public ModelStateDictionary …

C#WinForm的线程及Invoke应用(转)

C#多线程异步访问winform中控件 http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?fromdm&fromSearch&isFromSearchEngineyes 我们在做winform应用的时候&#xff0c;大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传…

C/C++语言点滴

C/C学习笔记 1.C语言中使用关键字sizeof来求数组长度 char temp[3]; int tempLen sizeof(temp)/sizeof(char); strlen只能用来求字符串长度 2.交换两个数据的几种方法及其区别 方法一&#xff1a;值传递&#xff0c;在main函数中并未改变a,b 的值&#xff0c;虽然在swap中a…

[C#][EF] 添加表添加不进来

确认此表有没有主键&#xff0c;没有主键时就会这样。转载于:https://www.cnblogs.com/z5337/p/8891230.html

DNN 数据访问策略 (转)

经过几天断断续续的努力&#xff0c;这篇文章终于翻译结束&#xff0c;文章主要讲了DNN的数据访问策略&#xff0c;对于了解系统整体上是如何工作的有一定的帮助&#xff0c;希望能给dnn的初学者一些有用的信息。由于翻译的匆忙水平有限&#xff0c;错误或不当之处在所难免&…

Windows程序设计学习笔记(1):一个简单的windows程序

《Windows程序设计》(第五版)(美Charles Petzold著) 1 #include<windows.h>2 3 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);4 5 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdline,int iCmdShow) 6 //第一个参数是实例句柄&#…

【二级java】模拟题知识点总结

算法的复杂度 &#xff1a; &#xff08;一&#xff09;时间复杂度 &#xff1a; 执行算法所需要的计算工作量&#xff0c;与计算机的运行速度和存储空间无关 &#xff08;二&#xff09;空间复杂度 &#xff1a; 算法在运行过程中临时占用的存储空间的大小。 零散知识点 &am…