Git介绍和使用命令

Git上传代码说一下步骤:

1、在本地写完代码要上传,为了以防万一先将写的代码备份一下。
2、备份完代码之后,将写的代码进行储藏操作或者暂存在本地分支。
3、在上一步把修改的代码储藏或者暂存之后,将分支上最新代码拉取下来。
4、把最新代码编译运行一下,保证分支上拉取下来的最新代码是没问题不会报错的,因为有时候自己或者同事粗心大意一下会把有冲突或者有报错的代码传上去到分支上。先确保分支上的最新代码是没有问题的。
5、拉下来的最新代码没问题之后,把刚才储藏或者暂存的自己写的代码合并到本地,跟拉下来的最新代码进行合并,让自己的代码跟最新代码没有冲突。合并有冲突就先解决冲突。
6、合并好代码之后,再使用git commit进行提交和git push上传操作。

一、常用Git命令说明:

0、git根目录:	在文件管理器里面显示隐藏文件,能显示	.git	的就是这个目录,或者	git status	能显示git信息的目录

1、git gui&				在git可视化界面里面查看本地代码和仓库代码相比较是否有更改。

2、git stash			直接运行不加参数,没有备注信息,会将当前分支的所有修改数据全部储藏起来。

3、git stash	save “新增helloword功能”		储藏本地代码并设置储藏描述。

4、git stash list		列出本地当前分支所有的储藏记录列表。

5、git stash apply <number> 		将储藏起来的代码再还原到本地与更新的代码合并。储藏记录还在。

6、git stash pop <number>		储藏起来的代码再还原到本地与更新的代码合并。储藏记录会被删除。

7、git pop				将最后一次储藏起来的代码再还原到本地与更新的代码合并。储藏记录会被删除。

8、git stash drop <number>	删除对应的储藏记录。

9、git stash show <number>	显示储藏记录中对应文件和当前文件的大概变化,粗略展示。

10、git stash show -p <number>	显示储藏记录中对应文件和当前文件的详细变化,精准展示。

11、git pull				从远程分支代码仓库拉取远程分支代码更新到本地代码分支。

12、git push				将本地分支个人仓库的所有提交上传到远程分支代码仓库。		

13、git add [file1] [file2] ...			添加指定文件到暂存区

14、git checkout master					切换到master主分支。

15、git rebase + 有修改的分支名			将有修改的分支里面自己写的新增代码合并到更新了最新远程分支代码的当前所在分支。

16、git checkout -b new					基于当前所在分支创建一个叫new的分支并切换到new分支

17、git branch							列出所有分支。没有参数时,会列出你在本地的分支。

18、git branch -d testing				删除名字叫testing的分支

19、git merge newtest					合并newtest分支到主分支

20、git log								使用 git log 命令列出历史提交记录如下

21、git tag								查看所有标签

22、git init							该命令执行完后会在当前目录生成一个 .git 目录。

23、git init newrepo					使用我们指定目录作为Git仓库。	初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

24、git commit -m <message>				把文件提交到仓库,完成。

25、git clone <repo>					我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

26、git clone <repo> <directory>		如果我们需要克隆到指定的目录,可以使用以下命令格式:参数说明:	repo:Git 仓库。	directory:本地目录。

27、git status							显示你上次提交更新后的更改或者写入缓存的改动

28、git diff							来查看执行 git status 的结果的详细信息。
											git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
													尚未缓存的改动:git diff
													查看已缓存的改动: git diff --cached
													查看已缓存的与未缓存的所有改动:git diff HEAD
													显示摘要而非整个 diff:git diff --stat
				
	
29、git reflog --date=local | grep leavepost		查看leavepost分支从父分支创建的时间及合并分支时间和合并记录
	
30、git reflog show --date=iso leavepost			产看这个分支创建的时间
	
31、git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n						列出远程Git分支按作者排序的committerdate
												
32、git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n|grep leavepost			比如你想查看某个分支branch_A, 那么就再后面加上|grep branch_A										

33、git reset [file]							重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
	
34、git reset --hard							重置暂存区与工作区,与上一次commit保持一致
	
35、git reset [commit]							重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
	
36、git reset --hard [commit]					重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
	
37、git reset --keep [commit]					重置当前HEAD为指定commit,但保持暂存区和工作区不变
	
	
38、git revert [commit]							新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支.

39、git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

二、git比较两个分支的文件的差异:

git diff branch1 branch2 --stat   			//显示出所有有差异的文件列表

git diff branch1 branch2 文件名(带路径)   	//显示指定文件的详细差异

git diff branch1 branch2                   	//显示出所有有差异的文件的详细差异

三、增加/删除文件

	git add [file1] [file2] ...					添加指定文件到暂存区
	
	git add [dir]								添加指定目录到暂存区,包括子目录
	
	git add .									添加当前目录的所有文件到暂存区
	
	
	git add -p									添加每个变化前,都会要求确认,对于同一个文件的多处变化,可以实现分次提交
	
	git rm [file1] [file2] ...					删除工作区文件,并且将这次删除放入暂存区
	
	git rm --cached [file]						停止追踪指定文件,但该文件会保留在工作区
	
	git mv [file-original] [file-renamed]		改名文件,并且将这个改名放入暂存区

四、撤销

	git checkout [file]							恢复暂存区的指定文件到工作区
	
	git checkout -- file						直接丢弃工作区的修改时
	
	git checkout [commit] [file]				恢复某个commit的指定文件到暂存区和工作区
	
	git checkout .								恢复暂存区的所有文件到工作区
	
	git reset [file]							重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
	
	git reset --hard							重置暂存区与工作区,与上一次commit保持一致
	
	git reset [commit]							重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
	
	git reset --hard [commit]					重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
	
	git reset --keep [commit]					重置当前HEAD为指定commit,但保持暂存区和工作区不变
	
	
	git revert [commit]							新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
	
	git stash									暂时将未提交的变化移除,稍后再移入
	git stash pop

五、git diff和gui&提示filemode发生改变(old mode 100644、new mode 10075)

	git config core.filemode false				使用如下方法让git忽略文件权限,执行这个命令
	
	git config --global core.filemode false			如果要全局修改的话,加 --global 选项
	
	
	这个文件模式 100644 的意思:

	我们经常见的是后三位,比如上面的 644,UNIX 里的文件模式记法。

	在 shell 里 ls -l 时第一列就是。
	前三位代表了文件类型。100 是普通文件的意思。
	
	0100000000000000(040000):目录

	1000000110100100(100644):常规的非可执行文件

	1000000110110100(100664):常规的不可执行的组可写文件

	1000000111101101(100755):常规可执行文件

	1010000000000000(120000):符号链接

	1110000000000000(160000):Gitlink

六、Git简介

1、Git是什么?

	Git是目前世界上最先进的分布式版本控制系统(没有之一)。

	Git有什么特点?简单来说就是:高端大气上档次!
	
	
2、Git的诞生:

	很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

	Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

	事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!	
	
	
	Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

	Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

	历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
	
	
3、集中式vs分布式

	1、Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?	
		
		1、集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
		
			集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
			
		2、分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

		3、分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。			

七、安装Git:

1、在Linux上安装Git
	
	首先,你可以试着输入git,看看系统有没有安装Git:

	$ git
	The program 'git' is currently not installed. You can install it by typing:
	sudo apt-get install git
	像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。

	如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。

	老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。

	如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。			
	
	
2、在Windows上安装Git
	
	在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

	安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

	install-git-on-windows

	安装完成后,还需要最后一步设置,在命令行输入:

	$ git config --global user.name "Your Name"
	$ git config --global user.email "email@example.com"
	因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

	注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。	

八、创建版本库:

1、什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。


2、小结

	初始化一个Git仓库,使用git init命令。

	添加文件到Git仓库,分两步:

	使用命令git add <file>,注意,可反复多次使用,添加多个文件;
	使用命令git commit -m <message>,把文件提交到仓库,完成。		


3、小结:
	
	要随时掌握工作区的状态,使用git status命令。

	如果git status告诉你有文件被修改过,用git diff可以查看修改内容。	
	

4、版本回退:		

	HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

	穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

	要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

九、工作区和暂存区:

1、工作区(Working Directory)

	就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。
	
2、版本库(Repository)

	工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。	

3、暂存区:
	Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

	前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

	第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

	第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

	因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

	你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

十、管理修改:

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。、

1、小结
	
	现在,你又理解了Git是如何跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。	

十一、撤销修改:

1、小结

	场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

	场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

	场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

9、删除文件:

1、小结
	命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

十二、远程仓库:

1、请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

2、第1步:创建SSH Key。
	在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

	$ ssh-keygen -t rsa -C "youremail@example.com"
	你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

	如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。


3、第2步:在github添加SSH Key。

	登陆GitHub,打开“Account settings”,“SSH Keys”页面:

	然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

	点“Add Key”,你就应该看到已经添加的Key:

4、为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

5、添加远程库:

1、小结

	要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;

	关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;

	关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

	此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

	分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

6、从远程库克隆:

1、小结

	要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
		git clone git@github.com:michaelliao/gitskills.git
		注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了:
		$ cd gitskills
		$ ls
		README.md
		
		
	Git支持多种协议,包括https,但ssh协议速度最快。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值