git常用命令

概念:

工作区(Working directory):将一个文件夹通过git init设置成一个git可以管理的文件夹(即:创建本地仓库)时,这个文件夹里的内容就是工作区。

版本库(repository):在工作区中,有一个.git文件夹,这个.git文件夹就是版本库。
	
暂存区(stage/index):.git文件夹下的index文件就是暂存区,用来暂时存放工作区中修改的内容。

.git目录中的文件:
	
	index		暂存区
	HEAD		指向当前分支的一个提交
	refs/		记录着每个分支指向的提交
	info/		指定本项目要忽略的文件
	logs/		记录着git的操作日志
	objects/	git对象库,用来存储各种创建的对象以及内容。

命令:

1)设置git的用户名和邮箱:
	
	命令:git config

	1)设置 /etc/gitconfig文件,即操作系统上所有的用户都使用的配置文件:
		git config --system user.name "jxn"
		git config --system user.email "jxn@email.com"

	2)设置 ~/.gitconfig文件,即当前登录用户使用的配置文件:
		git config --global user.name "jxn"
		git config --global user.email "jxn@email.com"
	
	3)设置 repository/.git/config文件,即当前项目中使用的配置。注:必须先cd到一个git repository目录下,才能执行以下命令:
		git config user.name "jxn"
		git config user.email "jxn@email.com" 
	  或
		git config --local user.name "jxn"
		git config --local user.email "jxn@email.com"

	4)查看git用户名和邮箱:
		git config user.name
		git config user.email
		说明:
			1>如果是在某个git repository下使用该命令,则表示查看当前项目中使用的git用户,	查找顺序:.git/config --> ~/.gitconfig --> /etc/gitconfig
			2>如果不是在某个git repository下使用该命令,则表示查看当前登录用户使用的git用,	查找顺序:~/.gitconfig --> /etc/gitconfig
		
	说明:我们一般使用--global参数来设置git的用户名和邮箱。

	
2)生成秘钥:
	ssh-keygen -t rsa -C "jxn@email.com"


3)clone分支:

	使用http地址:
		git clone http://***.git
		# 参数:
		# 	git clone http://***.git			clone master分支
		# 	git clone -b 2.0.4 http://***.git 	clone 指定分支
	
	使用ssh地址:
		git clone git@127.0.0.1:***/***.git 	
		# 参数:
		#	git clone git@127.0.0.1:***/***.git 				端口为默认的22端口
		#	git clone ssh://git@127.0.0.1:39876/***/***.git 	端口为非标准的22端口


4)更新、提交、推送、回退:

	git pull 
	# 更新本地代码(如果有冲突需要解决冲突)
	# 说明:
	#	1)如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建。
	#	2)建立本地分支和远程分支的链接关系:git branch --set-upstream 本地分支名 远程仓库名/远程分支名
	# 参数:
	#	git pull -p 	若远程分支被删除了,则删除本地对应的分支
	#	git fetch -p  	若远程分支被删除了,则删除本地对应的分支
	# 	git fetch --prune origin	若远程分支被删除了,则删除本地对应的分支

	git add		
	# 参数:
	#	git add .	将新增、修改的文件添加到暂存区,不包括删除的文件。
	# 	git add -u	将修改的文件添加到暂存区。
	# 	git add -a	将新增、修改、删除的文件添加到暂存区。
	# 说明:
	#	git add fileName	将指定的文件添加到暂存区。
	
	
	git commit –m 本次提交的说明 
	# 将添加到暂存区的修改提交到本地仓库。
	# 注意:idea等IDE工具在commit的时候,首先会将工作区的修改add到暂存区,然后再commit到本地仓库。
	
	
	git push 远程仓库名(默认是origin) 本地分支名 远程分支名
	# 将当前分支的修改推送到远程分支上
	# 说明:
	#   1)若远程分支名不存在,则会自动创建远程分支。
	# 参数:
	#	git push origin master		# 若远程分支名被省略,则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名)。	
	#	git push origin				# 若当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略。
	#	git push					# 若当前分支只有一个远程分支,则可以省略远程仓库名。
	#	git push -u origin master	# 若当前分支与多个远程仓库存在追踪关系,则可以使用 -u 参数指定一个默认的远程仓库,这样后面就可以不加任何参数,直接使用git push来推送当前分支的修改了。

	
	git fetch
	# 更新远程代码到本地仓库,不会自动合并分支。
	# 注:
	#	git pull 			等价于 git fetch + git merge FETCH_HEAD
	#	git pull --rebase	等价于 git fetch + git rebase FETCH_HEAD
	#	git fetch -p  				若远程分支被删除了,则删除本地对应的分支
	# 	git fetch --prune origin	若远程分支被删除了,则删除本地对应的分支		

	
	git rebase
	# rebase当前分支:重新定义当前分支的起点。
	# 
	# 过程:
	#	在master分支上新建一个topic分支,在topic分支上执行 git rebase 命令的过程:
	#		1>先将在当前分支topic中提交的代码暂时转移到在一个临时文件中,
	#		2>然后将master上最新的代码更新到当前分支,
	#		3>最后再将临时文件中的内容添加到当前分支中。
	# 冲突:
	# 	在第3步中,可能会有冲突发生,在解决完冲突后,提交并push即可。
	#		1>在idea下,解决完所有冲突后,提交并push即可。
	#		2>在命令行下,每解决一个冲突文件,就调用git add将该文件添加到暂存区,接着调用一次git rebase –-continue命令(该命令会提示开发者还有哪些冲突没有解决)。当所有的冲突都解决后,提交并push即可。
	# 参数:
	#	git rebase --abort 	# 放弃当前分支的rebase操作
	#	git rebase --skip 	# 将引起冲突的commits丢弃掉,不建议使用!
	#
	# 举例:
	#	我们从master分支上新建了一个topic分支来进行开发。
	#	当我们在topic分支上开发的时候,其他人在master上又push了新的代码。
	#	此时,我们可以使用:git rebase origin/master 或 git rebase master 或 git rebase 将master上新加进来的代码更新到topic分支中。
	#
	# 说明:
	#	如果多人同时在一个topic分支上开发,则我们可以直接在idea中commit,然后push:如果远程有更新则会提示是否需要rebase,选rebase后:
	#		1>若没有冲突,则idea会自动进行rebase操作并提交(注:这里的rebase操作只会将topic分支的最新代码更新下来,而不会将master分支的最新代码更新下来!);
	#		2>若有冲突,则解决完冲突后提交push即可。

	
	git log
	# 查看所有人的提交日志
	# 参数:
	#	git log --graph				查看分支合并图
	#	git log --graph --oneline --shortstat	查看分支合并图和简易统计信息
	
	git reflog
	# 查看自己执行过的所有命令
	
	git status
	# 查看当前状态:
	# 	如果发现红色文件,则表示该文件未进入暂存区。
	# 	如果发现绿色文件,则表示该文件已经add到暂存区,但是还没有commit。
	# 文件的三种状态:
	#	Untracked files:				工作区中未被跟踪的文件,一般是新建的文件。
	#	Changes not staged for commit:	修改后未add进暂存区的文件。
	#	Changes to be committed:		修改后并add进暂存区中的文件。
	
	git diff
	# 参数:
	#	git diff 			比较 工作区和暂存区 之间的不同之处
	#	git diff --cached	比较 暂存区和版本库 之间的不同之处
	#	git diff HEAD 		比较 工作区和版本库 之间的不同之处
	
	
	git reset 版本号
	# 回退指定的版本(通过git log可以查到版本号:commmit后的那串数字) 注:HEAD指向当前的版本(最近一次的提交),HEAD^指向上一个版本,HEAD^^指向上两个版本。
	# 参数:	
	# 	git reset --soft 	版本号	只回退commit的信息,不回退index(暂存区)和本地代码。
	# 	git reset --mixed 	版本号	回退commit和index,不回退本地代码,默认使用该策略。
	# 	git reset --hard	版本号	彻底回退到指定的版本,本地代码、commit、index都会回退。
	# 说明:
	# 	git reset 即 git reset HEAD
	
	git reset HEAD fileName
	# 把暂存区中指定文件的修改回退到工作区中,即unstage。
	# eg:把暂存区的修改回退到工作区:git reset HEAD . 

	git checkout -- fileName
	# 用暂存区中的fileName文件来覆盖工作区中的fileName文件。

	git revert 版本号
	# 回退指定的版本()
	# 注意:
	#	1)git revert是对工作区中的代码进行自动修改(回退),所以在git revert后,还需要执行一次commit才能实现回滚的效果。
	# 	2)对于已经push到服务器上的内容作回滚,推荐使用revert。
	# 比较:git revert是用一次新的commit来实现代码的修改(回退),git reset是直接删除指定的commit。
	

5)远程仓库的相关操作:	
	
	git remote
	# 查看远程库列表
	# 参数:
	#	git remote -v	查看远程库列表,并且显示clone的URL。

	git remote add RepositoryName gitURL
	# 添加远程仓库。
	
	git remote show RepositoryName
	# 查看远程仓库的信息。
	
	git remote rm RepositoryName
	# 删除远程仓库。
	
	git remote rename oldName newName
	# 给远程仓库重命名。
	
	
6)创建、删除、合并、推送分支:
	
	git branch
	# 查看当前分支
	# 参数:
	# 	git branch -r 查看远端所有分支
	# 	git branch -a 查看所有分支
	# 说明:
	#	* 表示当前所在分支

	git branch 分支名称
	# 创建分支
	# 说明:在哪个分支上(或tag上)新建分支,就先切换到哪个分支上(或tag上),然后再使用'git branch 分支名称'命令来创建分支。
	
	git branch -m oldName newName	    
	# 重命名本地分支名称
	
	git checkout 分支名称
	# 切换到指定分支。 注:若本地没有该分支,但是远程仓库有该分支,则会将远程分支添加到本地仓库中。

	git checkout -b 分支名称
	# 创建并切换到新的分支

	git branch -d 分支名称
	# 删除分支,这里删除的是本地的分支。
	
	git merge 分支名称
	# 合并指定分支到当前分支,fast forward模式
	# 参数:
	# 	git merge --no-ff 分支名称
	# 	# --no-ff参数表示使用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并则看不出来曾经做过合并。--no-ff参数即:禁用Fast forward

	git merge --abort
	# 放弃合并操作,保留本地的修改。
	
	git push 远程仓库名(默认是origin) 本地分支名:远程分支名
	# 将本地分支push到远程分支
	# 说明:
	#	1)若远程分支名不存在,则会自动创建。
	# 	2)冒号的两边不能有空格,否则报错:dst ref refs/heads/2.0.6 receives from more than one src.
	# 参数:
	#	git push origin 本地分支名		# 若省略远程分支名,则表示将本地分支push到远程的同名分支,即:git push origin A:A <==> git push orgin A 。
	# 	git push origin :远程分支名		# 若省略本地分支名,则表示删除远程分支。
	#	git push origin --delete 远程分支名		# 删除远程仓库分支


7)标签tag

	git tag
	# 查看标签
	
	git show 标签名
	# 查看标签的详细信息。
	
	git tag 标签名 版本号
	# 给指定的版本打tag,若不指定版本号,则默认打在最新的commit上。
	# 说明:
	#	标签是指向某个commit的指针
	# 参数:
	#	git tag -a 标签名 -m "说明" 版本号
	#	# -a 指定tag名,-m 给该tag添加的说明
	
	git tag -d 标签名
	# 删除tag,这里删除的是本地的tag
	
	git push 远程仓库名 标签名
	# 将打的tag推送到远程。
	# 参数:
	#	git push origin --tags				# push所有tag到远程
	#	git push origin :refs/tags/标签名	# 删除远程指定的tag
	#	git push origin --delete tag 标签名 # 删除远程指定的tag
	
	git checkout 标签名
	# 切换到指定tag下,目的是为了:查看指定tag下的代码 或 在指定tag下新建分支
	# 注意:我们一般不会在tag上做修改,若需要在指定tag下做修改时,我们一般会在该tag下新建分支,然后在分支上修改。


8)工作现场的存储

	git stash
	# 将当前分支的工作现场存储起来。
	# 场景:当我们需要立刻切换到其它分支上,但是还不想提交自己正在编辑的代码时,我们可以使用git stash来将当前代码的变更暂时存储起来。
	# 说明:
	#	1)git stash后,当前分支和远程分支的内容完全一样(即:nothing to commit, working tree clean),此时,当前分支就可以切换到其它分支进行操作了。
	#	2)在其它分支操作完成后,我们切换回当前分支,然后使用git stash pop来恢复之前存储的现场即可。
	# 步骤:
	#	1)保存当前分支的工作现场:	git stash
	#	2)查看工作现场是否保存成功:git stash list
	#	3)切换到其它分支进行操作:	git checkout otherBranch	...其它操作...
	#	4)切换回当前分支:			git checkout currentBranch
	#	5)恢复当前分支的工作现场:	git stash apply
	#	6)删除已恢复的工作现场记录:git stash drop
	#	注意:
	#		1)可以直接使用 git stash pop 来完成第5步和第6步。
	#		2)执行git stash list后,若发现有多个工作现场的存储记录,则在恢复工作现场时,使用git stash apply 存储记录的名称 	来恢复当前分支的工作现场。eg:git stash apply stash@{0}

转载于:https://my.oschina.net/u/1399755/blog/1622128

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值