git常用命令

本文详细介绍Git的基本概念,如工作区、版本库、暂存区等,以及常用的Git命令,包括设置用户名和邮箱、生成SSH密钥、克隆分支、更新提交、推送回退等操作。此外还介绍了远程仓库的操作、分支的管理、标签的应用、工作现场的存储等高级功能。
摘要由CSDN通过智能技术生成

概念:

	工作区(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 "备注内容,一般会备注为邮件地址,方便区分,也可以不设置备注。"
	
	
	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 rm -r --cached .
		# 删除暂存区中的变更:
		# 场景:配置完.gitignore文件后没有生效,可以使用该命令来删除已经添加到暂存区的文件(本地文件不会删除)

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


		git pull 远程仓库名 远程分支名
		# 将远程指定分支的代码同步到当前分支。
		# 举例:
		#	在feature/develop-jxn分支下执行:git pull origin feature/develop  	表示将远程feature/develop分支的代码同步到本地的feature/develop-jxn分支中。
		#	在feature/develop-jxn分支下执行:git pull origin feature/develop-jxn  表示将远程feature/develop-jxn分支的代码同步到本地的feature/develop-jxn分支中,即同步当前分支的最新代码。


		git add		
		# 参数:
		#	git add .	将新增、修改的文件添加到暂存区,不包括删除的文件。
		# 	git add -u	将修改的文件添加到暂存区。
		# 	git add -A	将所有改变的已跟踪文件和未跟踪文件添加到暂存区。
		#	git add -f 	将未追踪的文件添加到暂存区。
		# 说明:
		#	git add fileName	将指定的文件添加到暂存区。
		
		
		git commit –m 本次提交的说明 
		# 将添加到暂存区的修改提交到本地仓库。
		# 注意:idea等IDE工具在commit的时候,首先会将工作区的修改add到暂存区,然后再commit到本地仓库。
		# 参数:
		#	git commit --amend 	# 将本次的修改添加到上次的提交中,同时修改上次提交的说明。
		
		
		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 --all		Fetch all remotes
		#	git fetch -p  				若远程分支被删除了,则删除本地对应的分支
		# 	git fetch --prune origin	若远程分支被删除了,则删除本地对应的分支
		#	推荐使用:git fetch --all --prune		

		
		git rebase
		# rebase当前分支:重新定义当前分支的起点,即变基。
		# 说明:
		# 		git rebase --help 查看文档。
		# 重要:
		# 		若rebase不能达到效果,则建议使用merge来将最新的代码合并到当前分支:git merge --no-ff 分支名称
		# 参数:
		#	git -p
		#	git --preserve-merges 
		#
		#	推荐使用:git rebase -p origin/master
		# 
		# 过程:
		#	在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 cherry-pick
		# 在本地合入其它分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,此时我们可以使用git cherry-pick来达到这样的效果。
		# 举例:
			# 更新远程分支
			git fetch --all --prune
			# 查看提交历史,找到需要合入的commitId
			git log
			# 将指定的commit合并到当前分支
			git cherry-pick commitId

		
		git log
		# 查看所有人的提交日志
		# 参数:
		#	git log --graph				查看分支合并图
		#	git log --graph --oneline --shortstat	查看分支合并图和简易统计信息
		
		git reflog
		# 查看自己执行过的所有命令
		# 若不小心把代码revert了,则可以通过git reflog查看到之前到版本,然后通过git reset 版本号 来恢复。
		
		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^^指向上两个版本。
		# 注意:若不小心把代码revert了,则可以通过git reflog查看到之前到版本,然后通过git reset 版本号 来恢复。
		# 参数:	
		# 	git reset --soft 	版本号	只回退commit的信息,不回退index(暂存区)和本地代码。
		# 	git reset --mixed 	版本号	回退commit和index,不回退本地代码,默认使用该策略。
		# 	git reset --hard	版本号	彻底回退到指定的版本,本地代码、commit、index都会回退。
		# 说明:
		#	git reset 即 git reset HEAD
		# 	git reset --hard origin/master    清空本地未push的代码
		# 举例:
		#	撤销提交的commit,将所有的提交合并为一个commit,重新提交:
		# 	git fetch origin master
		# 	git reset --soft origin/master
		# 	git add .
		# 	git commit -m "new commit message"
		# 	git push origin HEAD:refs/for/master
		
		
		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 要回退的版本号
		# 	回退连续多个版本号:
		#		git revert 最老的版本号^..最新的版本号  # 虽然是一次操作,但是仍然会生成多个commit
		#	回退merge提交:
		# 		git revert 版本号 -m 1 	
		# 		# merge提交会涉及到两个分支,因此revert的时候git不知道你是想以哪个分支为主线进行回退,故需要你指定主线分支。
		#		# 如果你在master上将分支A合并了,那么1就表示master分支为主线分支,2表示A分支为主线分支。
		#		# 若回退merge commit时没有-m参数,则报:commiterror: commit xxxxx is a merge but no -m option was given.
		#
		# 参数:
		# 	-e	git revert 版本号 -e 	# 回退版本号且编辑commit信息。
		# 	-m 	git revert 版本号 -m 1	# 回退merge commit时,指定主线分支。
		#
		# revert和reset的对比:
		# 	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 checkout -b 本地分支 origin/远程分支
		# 将远程分支同步到本地,即:创建本地分支并关联远程分支


		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 远程分支名		# 删除远程仓库分支
		#	推荐使用:git push origin HEAD:refs/for/master 	# 提交并发起code review
	
	
	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}

	

		
		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值