1

Git基础研究及总结

前面的话:关于git环境的搭建,已有大量的文章阐述,本文仅总结一些自身学习git的一些心得,以及基础git指令的阐述,帮助大家更快了解git基础,能够更快适应日常工作中的git需求。

那么假设环境已经搭好,现在在github上创建新的仓库,并克隆到本地。

git基础流程:

现在,来先尝试一套最基础的git命令的使用方法:
1.在仓库本地存放文件夹处 git clone github上的git地址,将远端分支克隆至本地;

2.touch .gitignore 文件(可用来忽略不git的文件类型);

3.创建第一个文件,如下git add firstgitfile.txt ,将文件加入暂存区;
createfirstgitfile.png
4.git commit进行提交 在弹出的面板输入i修改,完成后Esc ZZ退出;
addfirstfile.png
5.git log查看日志信息 git push 推送到远端;
pushfirstfile.png
至此已完成git基本操作,这些操作很容易理解,但日常的开发中,仅仅这些知识还是远远不够的,下面我们详细介绍一些常用的git指令及原理。

git指令介绍

分支相关指令

指令: git checkout -b 分支名
介绍:创建并切出到创建的分支
指令:git branch <branchname>
描述:创建新的分支,但不会切出到此分支
指令:git checkout 分支名
介绍:切换到指定的分支,指定分支必须已存在,否则会报错
指令:git branch -d 分支名
介绍:删除指定分支
指令:git branch
描述:查看本地所有分支
指令:git branch -r
描述:查看远程所有分支
指令:git branch -a
描述:查看本地和远程的所有分支
指令:git push origin --delete [branchname]
描述:删除远程分支,删除后还需推送到服务器
指令:git branch -m <oldbranch> <newbranch>
描述:重命名本地分支

上传本地提交:

指令: git push
介绍:将当前branch指向的commit提交到远端同时将分支上的一系列commits提交到远端(只能用于已提交至远端的分支)
指令:git push 仓库名 分支名
介绍:将分支提交到指定仓库的指定分支,可直接提交到远端 (origin为当前仓库默认名)

合并其他分支:

指令:git merge 分支名
介绍:从分支分叉位置开始,将目标分支的所有提交合并到当前分支形成一个commits提交到当前分支

拉取远端的提交内容:

指令:git pull
介绍:从远端拉取分支所有的提交,其实现原理相当于把远端的提交都拉取到本地,再把这些提交merge到现在的分支

Add命令:

指令:git add 文件名
介绍:将文件加入暂存区
指令:git add .
介绍:保存新的修改和新建到暂存区
指令:git add -u
介绍:保存新的修改或者删除到暂存区
指令:git add -A
介绍:保存所有更改到暂存区
注意的是这里添加的是文件的改动不是文件名

查看日志:

指令:git log
介绍:查看所有提交记录
指令:git log -p
介绍:查看提交记录详细信息
指令:git log –oneline -n
介绍:展示自己提交的最近的那条日志

变基:

指令:git rebase 分支名
介绍:将提交记录的基准点设置为指定的分支
详细:merge的提交往往和在日志树上形成一个一个的分叉,这样开看来会有点混乱,所以我们可以用rebase来形成一个单一的链式结构,是日志记录更加清晰,它的原理则是把指定分支的最后一个提交作为我们分支的基础位置,然后把我们分支同指定分支的分叉位置起的所有提交,重新从基础位置再提交一次

修正提交:

指令:git commit --amend
指令:修正刚刚提交的内容
上面指令仅能修修改最近一次的提交,若想修改最近几次的提交,可用下面的指令。
指令:git rebase -i 提交位置[^]
介绍:交互式rebase修正 其中^代表提交位置的前一个提交, ^^代表前两个一次类推,也可以用 ~num 代表前num个开始交互式变基
注意:rebase过程中需要调整的提交记录要将对应的pick改为edit,退出就会开始rebase ,然后用commit –amend调整记录信息,rebase –continue 继续rebase直至完成
rebase撤销提交.png

撤销提交:

指令:git reset –-hard head^
介绍:撤销上一个提交,清空工作区和暂存区
指令:git rebase -i
介绍:rebase -i也可撤销 ,删除对应的pick即可
指令:git rebase -–onto branch 提交起点 提交终点
介绍:将当前分支的起点到终点的提交记录rebase提交至目标分支
注意:起点位置不包括起点
指令:git revert 提交记录
介绍:撤回指定提交记录的提交,原理是git执行一次同指定提交几率相反的操作

推送提交记录至远端:

指令:git push
介绍:推送提交记录至远端
指令:git push origin branch -f
介绍:强行推送。如果分支已推至远端,又在本地更改了commits提交记录,在不影响他人的情况下,可以使用此命令强行提交至远端分支。
注意:这样的方式不能用于master,仅限于自己的分支,且由于会覆盖他人提交记录,使用时要格外小心

reset命令详解:

reset命令的本质是重置head位置以及branch位置
指令:git reset -–hard 提交记录
介绍:重置head到指定位置,此时暂存区和工作区的提交记录会被直接删除
指令:git reset 提交记录
介绍:重置head到指定位置,会把暂存区和工作区的内容均放入工作区
指令:git reset –soft 提交记录
介绍:重置head到指定位置,会把因重置head位置产生的变动加入暂存区中

checkout命令详解:

指令:git checkout branch|commit|文件名
介绍:checkout命令本质是签出指定的commit,可以签出分支、提交记录甚至文件
指令:git checkout –detach
介绍:head和branch指针分离,很少用到

本地缓存

指令:git stash
介绍:缓存未提交文件
指令:git stash pop
介绍:恢复缓存文件
指令:git stash -u
介绍:缓存包括untrack在内的文件

reflog指令

指令:git reflog branch
介绍:查看所有分支所有操作记录,有时候可以用来找回删除的分支,还是蛮有用的

clean指令

git clean -[dfxn]
介绍:删除git目录下 untrack文件
参数介绍:
d -----删除未被添加到git的路径中的文件
f -----强制运行
x -----仅删除.gitignore里标记过的文件,那些既不被git版本控制,又不在.gitignore中的文件会被保留。
-n 显示将要删除的文件和目录

diff指令

指令:git diff
描述:比较当前工作区中文件的改动
指令:git diff –stage 或者git diff –cache
描述:比较当前暂存区中文件与上次提交的差异
指令:git diff –stat
描述:查看简单的diff结果
git diff sha1 sha2 [path]
描述:比较两次提交的差异,可指定比较的文件路径

restore指令

指令:git restore <文件>
描述:撤销指定文件的改动,只对版本库中的文件有效,默认撤销工作区中的改动
--staged,还原暂存区中的指定文件至工作区
指令:git restore . 对所有文件进行同样的操作

fetch指令

介绍:拉取原断的分支不合并,与pull的区别在于git pull =git fetch+git merge
指令:git fetch <远程主机名>
描述:将某个远程主机的更新全部取回本地
指令:git fetch <远程主机名> <分支名>
描述:只取回特定分支的更新

revert指令

指令:git revert <commit>
介绍:撤销指定的提交,实质是对指定提交内容进行一次方向的提交
指令:git revert <commit1>..<commit2>
介绍:撤销指定commit1至commit2区间内的提交,不包括commit
指令:git revert --no-commit commit1
介绍:revert会后默认commit,--no-commit会取消这次commit,改动仅放在暂存区

remote指令

指令:git branch
描述:查看本地所有分支
指令:git remote
描述:列出已经存在的远程分支
指令:git remote -v | --verbose
描述:列出详细信息,在每一个名字后面列出其远程url
指令:git remote add url
描述:添加一个远程仓库

rm指令

指令:git rm
描述:删除工作区文件,并且将这次删除放入暂存区
指令:git rm -f
描述:强制删除工作区文件,并且将这次删除放入暂存区
指令:git rm --cached
描述:从索引中删除文件。但是本地文件还存在, 只是不希望这个文件被版本控制。

cherry-pick

指令:git cherry-pick <commit>
介绍:将指定提交记录提交到当前分支
指令:git cherry-pick <commit1> <commit2> …
介绍:将指定多个提交记录提交到当前分支,每个提交记录用空格分隔

grep指令

通过git grep命令检索文件中的文本内容非常的便利
Grep功能强大参数很多,可通过git grep –help获取详细介绍

结语

介绍到这里终于把基础的内容介绍完了,应付日常工作绝对没有问题了~,之后想要更加深入了解git的朋友可以点关注,欢迎一起来深入了解git相关知识!


Will
22 声望1 粉丝

专注于游戏领域中工具与性能优化方案的研究