Git进阶操作

在上一节对Git的流程以及基本操作有了基本认识,然而一个git项目往往是许多人一起协同工作,他们会对同一个remote repository进行操作,每个人与remote reposirtory之间存在不停的pull 以及push操作,因此远程库的版本节点会与用户当前的版本库节点不一致导致pull或者push失败。

在上一节对Git的流程以及基本命令进行了简单介绍,那些仅仅是git的基础操作,git还有其他进阶命令,可以帮助我们高效地检查、对比、管理项目文件,这也有一篇文章讲的也不错。

1. git log 命令

git log可以帮助我们查看整个项目的版本提交记录,它里面包含了提交人、日期、提交原因等信息。
常用命令 git log , git reflog , git log --oneline

git log  			#列出历史提交记录(不包括reset 之后的提交记录)。
git log --onelen  	#列出历史提交了记录地简介版本  - n 指示显示最近几条记录。
git reflog  		# 列出所有历史提交记录,这个命令在不小心reset 项目之后,很有用。

Git进阶操作_第1张图片

2. git brabch

在git项目库默认分支是master (gitee)或者main (github)分支,当我们收到新的项目需求需要从主分支建立子分支,这时候就需要git branch命令,此外它还具重命名、查看、删除项目分支的功能。

 #########list branch ###########
 git branch  		#列出本地分支
 git branch  -a  	#列出所有分支
 git branch  -r  	#列出远程分支
 ########delete branch ##########
 git branch -d  bran_name  
 #删除分支,只有分支内容已合并主分支,才会顺利执行;否则使用下面的命令,强制删除。
 #这是一个安全的操作,因为当分支中含有未合并的变更时,Git会阻止这一次删除操作。
 
 git branch -D  bran_name  #强制删除
 #强制删除指定分支,即便其中含有未合并的变更。
 git branch -m bran_New_name 
# 对于当前分支重命名为bran_New_name。

Git进阶操作_第2张图片

3.git status

该命令查看文件变动状态,查看位于暂存区index或者工作目录worksapce中。

git status     
git status -s  #参数来获得简短的输出结果:

Git进阶操作_第3张图片
第一个 changes not staged for commit ;not staged 指明文件所处的状态是worksapce;
第二个 changes to be commiter ; to be commited 指明文件所处文件是worksapce;

4. git diff

diff 用于比较文件的不同,通过搭配不同的选项可以实现worksapce index repository 三者之间对比。

git diff   			#查看当前workspace 和最新的repository 之间差异
git diff --cached 	#查看当前暂存区index 和最新 repository之间差异
git diff  HEAD  	  		#产看worksapce 、暂存区index和最新的repository之间差异
git diff  branch1 branch2	#查看两个分支之间的差异

这部分实操可以自己实现,一定先看文件额状态,在比对两者之间差异。

5. git checout

checkout命令可以实现分支的切换,以及分支的创建,初次之外他还可抹除此次在暂存区以及工作目录的更改。切换分支时如果当前分支存有修改的文件,且并未执行commit或stash操作,git checkout操作会报error,如果不想需要当前分支的更改,可以添加-f选项,强制切换。

git checkout 				#核查工作区相对于版本库修改过的文件
git checkout branch2  		#切换到branch2
git checkout -n new_branch  #新建分支
git checkout -f HEAD        #将当前worksapce以及index文件恢复到最新一次commit的版本中文件版本
#换言之,就是可以将当前的所有更改抹除。也可以将HEAD指定某个文件。

Git进阶操作_第4张图片

6.git rm

git rm 命令用于删除文件。
rm 与 git rm区别

git rm      	#将文件从工作区workspce中删除,并将add到暂存区,
# 运行git status会有delet的提示。 git commit 后,#版本库中的此文件记录也会被删除。
git rm --cached #仅仅删除暂存区index里的文件。
git rm -f 		#强制删除。
#注意 git rm 只能删除与最新一次commit提交一致的文件。
#git rm -f 适用于已经修改的文件,或者修改并add到暂存区的文件。

注意到一点,当使用git rm之后版本控制工具会自动add到暂存区 ,如果之后不将之间rm的文件在一次add到暂存区,会导致push失败。

7.git add

将工作区worksapce的修改的文件或者新的文件添加到暂存区index。

git add  file_name
git add  dir_name  #将目录下的文件添加到暂存区

#注意对于工作区新建立的文件,git status 会识别为untracked files,git status -s 显示??;将其add到暂存区之后,再次运行git status 会识别为 new file, git status -s 显示A,若对新建立文件添加内容,显示AM。
Git进阶操作_第5张图片
Git进阶操作_第6张图片

8 git commit

git commit 命令将暂存区内容添加到本地仓库中。

git commit -m  "message"  #此次commit的一些备注信息
git commit -a   file_list -m "message" 
#file_list 是待commit的文件列表可以直接从workspace进行commit

git commit -amend   #我们这一次的修改合并到上一条历史记录当中,但是commit节点会变。

git commit --amend 虽然合并了记录,但是commit节点会变。
git commit --amend 示例
如果仅仅只想修改上一次commit的备注信息,可以在上一次commit之后,直接运行git commit --amend 运行,会弹出如下修改界面,在第一行修改之后直接保存即可。
Git进阶操作_第7张图片

9. git pull

git pull 命令用于从远程获取代码并合并本地的版本。

git pull <远程主机名> <远程分支名>:<本地分支名>   
git pull  origin   master		
#远程分支是与当前分支合并,则冒号后面的部分可以省略
# 将本地master 分支合并远程 master分支。
10.git push

git push 命用于从将本地的分支版本上传到远程并合并。

git push <远程主机名> <本地分支名>:<远程分支名>
git push   origin     master    
#远程分支是与当前分支合并,则冒号后面的部分可以省略
#将本地master 分支 推送到远程 master分支。
git push --force origin master   #如果本地版本与远程版本有差异
git push origin --delete master  #删除远程仓库的 master 分支
11. git fetch and git merge

git fetch 该命令适用于从远程仓库查询是否有新的内容。官方解释:从一个或多个仓库获取分支或标签,以及完成提交历史所必须的对象。
git merge 命令用于将一个分支合并到当前分支。官方解释:将已经提交的记录(从当前分支分开的时间开始的历史记录)合并到当前分支。

git  fetch       #默认查询远程仓库的所有分支
git  fetch   origin <branch> #从远程的branch分支查询更新。
git  merge   branch  #将branch合并到默认分支
git  merge   bran_merged bran_base 
#将bran_merged 合并到bran_base分支
git  merge --abort   
#当带合并分支有当前分支有conflict,可以用abort终止merge。并且abort会将各分支恢复到merge之前的状态。
git merge --continue 
#在解决冲突之后,将冲突的文件add到暂存区,才可以只从continue,否则会有error。
12.git reset

这里首先介绍下版本号的概念,版本号是git管理本地仓时生成的,每一次commit就会生成一个版本号,并且只有在commit时会生成版本号,版本号也就是之前提过的commit节点,下图横线的位置。
在这里插入图片描述

git reset 命令用于回退版本,可以指定退回某一次提交的版本,它有三个选项,分别是–mixed,–soft,–hrad,默认是–mixed。

git reset --mixed HEAD #等价于下面
git reset  HEAD       #重置暂存区的文件的提交状态,工作区保持不变。
git reset  --soft HEAD~n     #仅仅是撤销了最近n次的commit节点,暂存区和工作区均不变。
git reset  --hard HEAD~n     
#撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到前n版本,并删除之前的所有信息。

git reset HEAD 是git add 的逆操作,这在我们把不想要的文件add到暂存区,可以使用这个命令清空暂存区,然后再add需要提交的文件。
HEAD 表示当前版本个人人
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推…
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
git reset的图解过程参考git reset 图解

13 git stash

stash在英文意思是隐藏,stash命令可用于临时保存和回复修改。参考内容
注意:对于新创建的文件,它是未被版本控制系统记录的,stash操作并不会对其生效。

git  stash  -m message 	#message为本次stash的注释
git  stash list 			#所有保存的记录列表
git  stash pop      
#从最新的或者最近的一次stash的内容,恢复到本地,同时删除栈中stash的备份
git  apply  stash@{n}  #从指定stash中恢复数据,但是不会删除栈中stash备份
git  stash show        #显示stash操作中更改摘要
git  stash drop   stash@{n} #将指定stash从栈中删除
git  stash clear       #删除所有stash备份。

Git进阶操作_第8张图片
Git进阶操作_第9张图片

你可能感兴趣的:(git,git,linux)