在上一节对Git的流程以及基本操作有了基本认识,然而一个git项目往往是许多人一起协同工作,他们会对同一个remote repository进行操作,每个人与remote reposirtory之间存在不停的pull 以及push操作,因此远程库的版本节点会与用户当前的版本库节点不一致导致pull或者push失败。
在上一节对Git的流程以及基本命令进行了简单介绍,那些仅仅是git的基础操作,git还有其他进阶命令,可以帮助我们高效地检查、对比、管理项目文件,这也有一篇文章讲的也不错。
git log可以帮助我们查看整个项目的版本提交记录,它里面包含了提交人、日期、提交原因等信息。
常用命令 git log , git reflog , git log --oneline。
git log #列出历史提交记录(不包括reset 之后的提交记录)。
git log --onelen #列出历史提交了记录地简介版本 - n 指示显示最近几条记录。
git reflog # 列出所有历史提交记录,这个命令在不小心reset 项目之后,很有用。
在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。
该命令查看文件变动状态,查看位于暂存区index或者工作目录worksapce中。
git status
git status -s #参数来获得简短的输出结果:
第一个 changes not staged for commit ;not staged 指明文件所处的状态是worksapce;
第二个 changes to be commiter ; to be commited 指明文件所处文件是worksapce;
diff 用于比较文件的不同,通过搭配不同的选项可以实现worksapce index repository 三者之间对比。
git diff #查看当前workspace 和最新的repository 之间差异
git diff --cached #查看当前暂存区index 和最新 repository之间差异
git diff HEAD #产看worksapce 、暂存区index和最新的repository之间差异
git diff branch1 branch2 #查看两个分支之间的差异
这部分实操可以自己实现,一定先看文件额状态,在比对两者之间差异。
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 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失败。
将工作区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 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 pull 命令用于从远程获取代码并合并本地的版本。
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master
#远程分支是与当前分支合并,则冒号后面的部分可以省略
# 将本地master 分支合并远程 master分支。
git push 命用于从将本地的分支版本上传到远程并合并。
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master
#远程分支是与当前分支合并,则冒号后面的部分可以省略
#将本地master 分支 推送到远程 master分支。
git push --force origin master #如果本地版本与远程版本有差异
git push origin --delete master #删除远程仓库的 master 分支
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。
这里首先介绍下版本号的概念,版本号是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 图解
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备份。