Git 常用命令

参考个人博客:http://www.zhuzhuman.com/nav-1/type-7/article/16.html

git管理的工作流程:
工作区 -> 暂存区 -> 分支 (暂存区和分支属于版本库)
工作区通过add可以将文件加进缓存区,缓存区通过commit可以到当前分支

工作区: 我们电脑中的文件夹,我们操作文件是在工作区操作。

版本库: 工作区里面隐藏的.git目录。
暂存区: 属于版本库,用于暂存工作区add进来的新文件,和发生修改的内容。
分支:属于版本库,可以理解为记录并连接所有提交的时间线,可有多条分支,HEAD是一个指针,表示当前版本,用于指定当前处于哪个分支的哪次提交上面,默认是在最近一次,可以指定特定的提交。

个人理解:一个版本库相当于5维空间,分支相当于4维空间(时间线),每次的commit是三维空间(时间点),每次commit下的文件是2维空间,文件里面的内容属于1维空间。我们(
HEAD)可以切换到任意分支(时间线)的任意commit(时间点),还可以查看该次commit(时间点)下修改的文件和内容

1. 本地管理

首先我们需要进入到要管理的文件夹下。进入方法 -> 在终端输入: cd 文件夹路径 然后回车即可进入 (windows系统可以用git-bash进行git操作)

1-1 创建版本库 git init
git init   
	该命令是将当前文件夹变为git可以管理的仓库,
	创建完成会在目录下生成.git目录,为隐藏目录。用来跟踪管理版本库的。
1-2 查看文件夹下文件状态 git status
git status
	该命令可以查看git管理的当前文件夹下文件的状态。常见状态:
	1. fatal: Not a git repository 报错,该文件夹没被git管理
	2. Untracked files: 未被管理的文件,可以用git add将其管理起来
	3. Changes to be committed: 文件已暂存,由工作区进入暂存区,
			两种形式的文件:
			modified:发生修改的文件
			new file :新增的文件	
	4. Changes not staged for commit: 已管理的文件发生了修改,但没有提交。
	5. nothing to commit, working tree clean  工作区是干净的,即没发生修改。
1-3 查看修改内容 git diff
git diff   或者   git diff 文件名
	查看修改的内容(工作区和缓存区快照进行对比),前者查看所有修改,后者针对某文件查看相应的修改。
	注: 该命令必须使用在git add之前,add后不能查看修改了就。
1-4 添加文件 git add
git add 文件名   或者   git add -A
	将修改的文件或者将未被管理的文件加进暂存区,前者是添加指定文件,后者是添加所有文件
1-5 撤销修改
git checkout -- 文件名 
	撤销该文件在工作区的修改,不影响暂存区,该命令不能撤销已加入暂存区的修改,
	(其实是用暂存区里的版本替换工作区的版本,一键还原),
	注:文件名前有空格。
git reset HEAD 文件名
	撤销暂存区的修改,重新放回到工作区
1-6 提交修改 git commit
git commit -m "对修改的描述"   
	提交暂存区内容,使用在git add 之后
git commit -a -m "对修改的描述"  或  git commit -am "描述"
	可将工作区修改完或删除的文件直接提交,相当于add和commit组合,
	但是对新增的没被tracked的文件不能这样用,必须先add再commit
git commit --amend
	在push到远端之前,可以在不更改commitId的前提下,修改最近一次的commit 信息,也能修改提交的内容。
	执行命令后会进入 注释页面 的 vm模式, 在里面可以修改commit信息 和提交的内容,修改完保存退出即可。
	如果已经push到远端,那么再次push时候需要执行 -f 强制推送
1-7 查看管理日志 git log
git log
	查看当前分支的提交记录
	(只显示当前所在commit以及之前的commit信息,版本回退后,回退版本之后的提交信息不显示)
	参数:
		1. -n(n为正整数) 
			查看最近几次的提交信息
		2. --pretty=格式名  
			用指定格式来显示每次的提交,有oneline、short、medium(默认值)、full、fuller、raw等,
		3. --author=作者名
			查找指定作者的提交
		4. -p
			展开显示每次提交的内容差异
		5. -stat
			简要显示每次提交文件增改行数
		6. --grep=过滤用的字符
			找到所有提交描述里包含该字符的提交
git reflog
	显示你的每一次命令,并且可以显示出所有操作对应的提交的commit id,
	这样即使进行版本回退(从现在回到过去),也可以通过该命令找到回退版本之后的commit id,
	然后就可以从过去回到现在

注:有时候会遇见git log 中文乱码的问题,解决办法
	git config --global i18n.commitencoding utf-8
	git config --global i18n.logoutputencoding utf-8
	export LESSCHARSET=utf-8
1-8 显示提交的修改内容 git show
git show [options] <options>...
	显示一个或多个对象(可以是:blobs,树,标签和提交)。
git show
	展示当前commit修改的内容(和上个commit做对比)
git show commitID
	展示指定commit做了哪些修改
git show 标签名
	展示指定标签及指向的对象
1-9 版本回退 git reset/git revert
git reset --hard HEAD^
	回退到上个版本,^代表上一个,^^代表上上一个,以此类推,HEAD~66代表回退到往前66个版本。
git reset --hard 想要回退的版本commit id
	回退到指定的版本,commit id不用写全,写前几位就行,git会自动寻找,也不能太少不然可能找出多个版本

git revert 回退的版本commitId	
	是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。

注:
git reset 和 git revert 的区别:
	git reset 是直接回退到指定commit进行版本回退,
	而 git revert 是回退到指定的commit,然后在其上覆盖新的commit。
	
push完再进行版本回退后的提交问题:
	1.使用 git reset 回退后在push,会提示本地版本低于远端,push失败,除非使用 --force 强制push。
	2.使用 git revert 回退后再push则不会提示本地版本低于远端,因为revert是在回退之上加了新的commit。
1-10 删除文件 git rm
git rm 文件名
	从暂存区删除该文件,
git rm --cached 文件名
	清除该文件缓存,让文件或目录不再被git管理。
	如果我们需要在.gitignore里面添加一个已经被管理过的文件或目录的时候,
	需要执行这个命令,不然该目录还会被git管理。
1-11 分支
git branch
	查看分支信息,当前分支前有个*号
git branch -a
	查看所有分支,包括远端分支,远程分支用红色显示	
git branch -r
	查看所有的远端分支,搭配 git remote update 可以查看当前所有远端分支			
git branch 分支名
	创建一个新分支
git branch -m 旧分支名 新分支名
	重命名分支	
git branch --set-upstream-to=远端仓库名/远端分支  本地分支
	将本地指定分支和远端指定分支关联(追踪),这样pull、push的时候不用再指定分支了。	
git branch --set-upstream 本地分支 远端仓库名/远端分支
	将本地分支追踪到远端分支,方便pull 和 push等操作
	例:
		省略远端分支名 git pull origin
		如果只有一个追踪分支,可以省略仓库名 git pull
git checkout 分支名
	切换到该分支下
git checkout -b 分支名
	创建新分支,并切换到该分支。		
git checkout -t origin/远端分支
	在本地 pull 并 切换到对应的远端分支	
1-12 删除分支
git branch -d 分支名
	删除本地该分支,如果本地分支没有被合并会报错
git branch -D 分支名	
	强制删除本地分支,即使没合并也会被删除
git push origin --delete 远程分支名
	删除指定远程分支	
git push origin :远程分支名
	推送一个空分支到远程分支,其实就相当于删除远程分支	
1-13 合并分支一 git merge
git merge 指定的分支名
	合并指定的分支到当前分支,git会优先使用Fast-forward模式。
	合并成功:(没冲突)
		所在分支仍为当前分支,但是指针停留在指定分支的最新提交上。
		(相当于把指定分支所有提交加在当前分支提交之后,并将指针移向合并后最新的提交)
	合并失败:(有冲突)
		解决冲突后需要重新add和commit,重新commit会生成一个新的commit,
git merge 远程仓库名/远程分支名
	合并远程分支到当前本地分支		
git merge --no-ff -m "信息描述" 分支名
	合并指定的分支到当前分支,--no-ff强制禁用Fast-forward模式,
	此时在合并时会在当前分支生成一个新的commit,-m "描述"是用来描述该次commit的。
	合并成功后指针停留在新生成的commit上,而不再是停在指定分支的最新commit上。
	(两个分支在此commit处交叉,各个分支的commit还在原分支上面)
	

注:
	merge合并。内容合并后,各分支的提交信息还在相应的分支上,
	如果删除某分支,则该分支上相应的提交将丢失。
	rebase合并后,分支合并为1个,提交信息都在合并后分支上面
1-14 合并分支二 git rebase
git rebase 指定分支名
	合并指定分支到当前分支。会先将当前分支提交删除,提交信息暂存在rebase里。
	然后把指定分支合并到当前分支上,然后再把当前分支做的更改和提交重新加上去。
	(先同步指定分支提交,在加上当前分支提交)
git rebase -i HEAD~3
	合并3个commit(HEAD和之前的两个)为一个commit,
	之后3个commit会以倒序依次排列,最上面的是最早的提交。
	将第2,3个提交前面的pick改为s或squash,保存退出。
	然后会看到3次的提交信息描述,将其修改为合并后的描述,保存退出。

注:
	git rebase 相关操作过程中,
	可以随时使用git rebase --abort来中断并恢复到之前的样子。
	git rebase --continue用来继续之前的合并。	
	使用此功能时一般是在push之前,
	因为如果有commit已经push,此时将该commit和别的合并,在push会报错。因为会和远端冲突	
1-15 保存当前分支工作现场 git stash
git stash
	将当前分支工作现场(工作区和暂存区)暂时保存起来,并使工作区和暂存区变干净。
	此时可进行其他工作。可进行多次保存。
git stash list
	查看当前分支保存的工作现场列表。
git stash apply
	当别的工作做完提交后,可用该命令恢复之前保存的工作现场。但是stash内容并不删除。
git stash apply stash列表中的某次保存
	恢复到指定的stash,例:git stash apply stash@{0}
git stash drop
	删除保存的工作现场
git stash pop
	恢复工作现场,并再恢复的时候把stash内容删掉。
	切换分支后该方法扔可以用,所以可以用该方法将分支上做的修改切换到另一个分支。
	将分支做的修改stash,然后切换到另一个分支 pop 即可
1-16 标签 git tag
git tag
	查看所有标签,按字母顺序列出,不是时间顺序。
git show 标签名
	查看指定标签的信息
git tag 标签名
	打一个指定名字的新的标签(默认打在最新的提交上面)
git tag 标签名 指定的commitid
	在指定的commit上面打一个指定名字的新标签
git tag -a 标签名 -m "描述信息" 指定commitid
	给指定提交打一个带描述信息的指定的标签名。-a指定标签名,-m描述说明
git tag -d 标签名
	删除指定标签
git push origin 标签名
	推送某标签到远程
git push origin --tags
	推送所以没推送的标签
git push origin :refs/tags/标签名
	删除远程标签,前提是先在本地删除本地标签

2. 远程仓库

git还能把本地仓库和远端关联,这样可以实现同步,而且还能实现多人协作。由于本地仓库和远程仓库的传输需要经过ssh加密,因此,我们需要设置SSH Key。常用远程仓库有Github、码云、bitbucket

2-1 和本地电脑建立关联
1. ssh-keygen -t rsa -C "邮箱地址"
	创建成功会生成一个隐藏文件夹.ssh,
	mac下在用户主目录下,
	windows在用户->admin下。
	里面包含三个文件,其中的id_rsa是私钥文件(不外泄),id_rsa.pub是公钥文件(可公开)。
	
2.  打开id_rsa.pub文件,复制里面的内容到远程SSH keys界面里的key里面,
	起一个title名,远端可添加多个SSH Key。
	点击保存即让本地电脑和远程建立连接,这样远程可知道推送信息的是谁。
2-2 建立远程仓库
在远程上面新建一个项目,建好后会有一个ssh链接。用于和本地仓库建立关联或用于clone。
2-3 本地仓库和远程仓库建立关联
  1. 首先在本地建好仓库,即被git管理的文件夹。(方法见上面的 本地管理 )

  2. 在本地终端中进入本地仓库下,输入:

     git remote add 远程仓库名 版本库网址
     	git remote add origin 远程的ssh链接
    
     注:
     	origin是远程仓库名字,一般远程库默认名字都叫origin。
     	可以改为别的,如果一个本地要关联多个远程,就要起不同的远程库名字,不然会冲突
    
2-4 克隆远程仓库git clone
git clone 远程库地址
	克隆指定远程仓库到本地,本地生成的文件名和远程仓库名一样
git clone 远程库地址 本地目录名
	克隆指定远程仓库到本地,并使用自定义的目录名
git clone -o 远程主机名 远程库地址
	-o 参数后面是 远程主机名,默认是 origin, 可以指定特定的远程主机名
注:
	git clone支持多种协议,包括:HTTP(s)、SSH、Git、本地文件协议等	    	
2-5 查看远程主机信息git remote
git remote
	查看远程版本库名 // origin
git remote -v
	查看远程仓库详细信息,包括抓取和推送的地址,若没有push权限,则不显示push地址。
git remote update
	更新当前所有远端分支的信息
git remote show 远程仓库名
	查看指定远程仓库的详细信息
	git remote show origin 	 // 查看origin远程仓库的详细信息	
2-6 删除远程关联
git remote remove origin
	删除和origin远端的关联
git remote rm 远程仓库名
	删除远程仓库的关联
git remote rename 原仓库名 新仓库名
	重命名远程仓库
2-7 拉取远程更新到本地 git fetch
拉取远程的更新,不影响本地的代码。
如果要在本地查看远程的更新,需要使用 “远程仓库名/远程分支名” 的形式去查看或操作
例:git merge origin/test  将远程分支的合并到当前分支

git fetch 远程仓库名
	拉去远程所有分支的更新到
	git fetch origin 
		将origin下的所有分支拉到本地
git fetch 远程仓库名 远程分支名
	拉去远程仓库下指定分支的更新到本地		
2-8 抓取远程更新git pull
git pull
	抓取远程仓库所有分支更新并合并到本地。git pull = git fetch + git merge
git pull --rebase
	抓取远程仓库的更新,在此基础上将自己的修改加上去。
	git pull --rebase = git fetch + git rebase。
	如果发生冲突,会让停止rebase,解决完冲突后用git add更新内容,
	然后执行git rebase --continue。
git pull --no-ff
	抓取远程仓库所有分支更新并合并到本地,不要快进合并
git pull 远程仓库名 远程分支名:本地分支名
	将指定远程分支拉取并合并到指定本地分支
	例:git pull origin master:dev
git pull 远程仓库名 远程分支名
	将远程仓库指定分支合并到当前分支	
git pull -p
	 -p 参数:在本地删除远程已经删除的分支
	 等同于:
	 	git fetch --prune origin 
	 	git fetch -p		
2-9 推送到远程 git push
git push -u origin master
	将本地仓库当前分支推送到origin远程库的master分支,
	当远程仓库是空时,第一次推送需要加上-u参数,指定origin远程库为默认主机,之后可以用简化推送指令。
	当前分支和多个仓库存在追踪关系的话,-u 参数可以指定默认主机,默认追踪的分支可以使用简化指令
git push origin master
	将本地仓库当前分支推送到origin远程库的master分支
git push
	将当前分支推送到默认主机
git push origin 远程分支名
	将本地当前分支推送远程指定分支,如果远程分支不存在,则在远程创建该分支	
git push origin 本地分支名:远程分支名
	将本地分支推送至远端,并把 本地指定分支 作为 远端指定的分支	
	如果左边本地分支为空,那么将删除后面的远端分支名
git push origin :远程分支名
	删除远程指定分支	
git push origin --delete 远程分支名
	删除远程指定分支	
git push --all origin 
	将本地所有分支推送到origin远程库。
git push origin --tags
	将标签也推送至远程库,git push默认不会推送标签tags,需加--tags参数
git push origin HEAD
	将当前分支推送至origin远程库下的同名分支
其他参数:
	-f  或者  --force
		强制推送并覆盖远端,有时候本地版本回退后,再push会提示本地版本behind远端,不让push,
		这时候在push命令中加 -f 可强制将本地内容push到远端并覆盖远端原有内容。
		注:慎用,特别是多人协作的时候,尽量别用-f。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值