git命令记录

简书地址:https://www.jianshu.com/p/b4b0b0aa7e08

不同于熟知的SVN,CC等集中式的版本控制工具,Git是一款开源的分布式版本控制系统。

基本概念

工作拷贝(工作目录):用于存放产品开发数据本地工作目录

索引(Index):用于存放待提交数据的缓存区

本地库:远端库的一个完整的拷贝,包括所有文件的修改记录,分支等。

远端库:本地库clone来源

中心库:远端库的一种,公司级存放某个项目所有产品数据的仓库。

快照(snapshot):版本库某个时间点所有文件集合

全球版本号(commitID):Git库的版本号是通过SHA-1算法根据库中的所有内容计算出一个40位的哈希值,这个哈希值是全球唯一的,基本只要前六位就可以唯一标识了。

4种文件状态

Untracked files:未被跟踪的文件,此文件在文件夹中,但并没有加入到git库,一般指新添加的文件

Change not staged for commit:已修改的文件,包括modified和deleted状态

Change to be commit:已缓冲的文件,暂存状态,即已add的文件,执行git commit则将修改同步到库中,包括modified、deleted和new file状态

Nothing to commit:已提交的文件,即已commit的文件

Git基本操作

Clone库

#git clone 中心库名称地址 本地工作目录名称
git clone https://github.com/9plus/9plus.github.io.git ~/

增加、修改文件

git add .		 #处理目录下的所有修改和添加的文件,但是不处理删除的文件
git add -A		 #处理目录下的所有状态的文件
git add -u		 #处理目录下所有修改和删除操作,但不处理新增的文件
git commit -m "提交信息"	    #将缓存区的修改提交到本地版本库
#保持change-id不变:通过git log可以找到对应提交的change-id
git commit --amend		#重写上次提交的信息

#实用情况
git add file			#第一次
git commit -m "test"
git log				#得到上一次的change-id
git commit --amend		#重写上次的change-id,第二次提交

取消已缓存的修改

git rm --cached 文件名		#将新添加的文件从缓冲区删除,不影响本地内容
git reset HEAD 文件名		#此操作将修改的文件从缓冲区内删除,不影响本地内容

删除文件

git rm 文件名			#此操作只是删除文件并将删除的信息提交到缓冲区,使用git reset恢复

remove后需要提交。

rm -rf 文件名 + git add 文件名 = git rm 文件名

同理还有git mv

取消本地文件的修改,包括删除的文件

git checkout 文件名	#此操作将取消尚未提交的本地文件已做的但未提交的修改
git checkout .		#回退当前目录下所有的修改文件

git clean -fd		#清除本地未被跟踪的所有文件

比较文件差异

git diff OldCommitId NewCommitId	#比较文件/目录下所有文件修改前后的不同,不加commitID则比较本地与缓存或者缓存与库中最新的
git diff --cached			#index和远程库比较
git diff HEAD/master		        #工作区和head比较

查看修改日志

#git log
git log --all --pretty=oneline --graph		#以树形显示日志的状态
git log --name-only				#显示所有修改的文件名称
git log --name-status			        #显示所有修改的文件名称和修改的状态
git log --since 2012-11-10			#显示从2012/11/20至今修改过的日志
git log -p					#详细信息

分支

  • 创建分支
git branch 分支名 commitID			#基于某一个全球版本号拉出新分支
git checkout -b 分支名 commitID 			#创建并切换分支  没注明commitID则默认为当前的HEAD

git checout -b=git branch + git checkout
  • 合并分支
git merge 分支名				#将分支名指定的分支合并到当前所在的分支
git cherry-picl commitID	        #将某次特定提交合并到当前分支
  • 查看分支
git branch
  • 检查分支是否合并到当前分支
git branch --merged			#查看已经合并到当前分支的所有分支
git branch --no-merged		        #查看还没有合并到当前分支的所有分支
  • 删除私有分支
git branch -d/-D 分支名

注:-d删除分支前会检查分支中的内容是否都已经合并到其他分支,如果没有,则命令不执行

-D不进行检查,直接删除分支

  • 重命名分支
git branch -m oldbranch newbranch

注:此操作是将"oldbranch"分支的名称改成"newbranch"。如果需要拉出分支,并同时切换到新分支可以用

git checkout -b oldbranch newbranch

上传

git push 远端库名称 本地分支名称:远程分支名称

注:此操作是将本地库的修改同步到中心库,如果本地分支的名称和远程分支的名称相同,则远程分支名称可省略。一般git push权限不对普通员工开放,普通员工需要提交代码使用repo upload

更新当前代码(不推荐用git pull命令强制将更新合并到本地)

git fetch 远端库名称		#获取远端库的更新到本地库
git merge 远程库/分支名称		#将中心库的更新合并到本地工作目录中

修改提交信息

got commit -m '新的提交信息' --amend

注:此操作只能修改最新的一次提交,之前的提交无法修改

回退某一历史版本,然后提交到本地库

git revert 全球版本库

注:此操作将回退记录到历史的某一节点,并作为一次新的提交到库中

回退

git reset commitId		#需要重新提交,修改的内容保持不变
git reset --har HEAD^		#回退到上个节点,修改的内容不保留

暂存本地修改

git stash
git stash pop

注:此操作是将本地未提交的修改暂存起来,并将文件状态恢复到HEAD,用pop即可恢复,非常适合临时插入的紧急bug修改

git stash list		    #查看本地的暂存的patchset

查看全部提交

git reflog		    #可以找回任何提交记录,在没有删除git仓的情况下

查看commit信息

git show commitId	    #展示本次修改的信息及内容

解决冲突

Hello
<<<<<<<  HEAD
12345
=======
world
>>>>>>>  TEST_BR

12345为当前分支上的内容,world为TEST_BR分支的内容

忽略文件

在git仓工作的根目录下创建.gitignore文件。如果将某个已经忽略的文件添加,使用

git add -f 文件名

忽略规则

*.a		#忽略所有.a结尾的文件
!lib.a  	#lib.a除外
/TODO   	#仅仅忽略项目根目录下的TODO文件,不包括subdir/TODO
build/		#忽略build/目录下的所有文件
doc/*.txt       #忽略doc/notes.txt但是不包括/doc/server/arch.txt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值