主要参考自链接:
https://git-scm.com/docs
https://www.runoob.com/git/git-basic-operations.html
http://marklodato.github.io/visual-git-guide/index-zh-cn.html
https://www.cnblogs.com/miracle77hp/articles/11163532.html
https://www.cnblogs.com/cb0327/p/5066685.html
https://blog.csdn.net/u013276277/article/details/82470177/
https://www.cnblogs.com/wangrenmeng/p/10430369.html
一、Git配置:
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量,这些环境变量,决定了 Git 在各个环节的具体工作方式和行为,可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用--global
选项,读写的就是这个文件。- 当前项目的Git目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
git config --list
:查看配置信息。
git config --global merge.tool vimdiff
:更改差异分析工具为vimdiff
配置个人的用户名称和电子邮件地址:
git config --global user.name "xxxname"
git config --global user.email "[email protected]"
二、基本操作:
2.1 创建仓库
git init
:在目录中创建新的 Git 仓库,ls .git/
可查看仓库信息,所有有关项目的快照数据都存放在其中。
git clone [url]
:拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
2.2 查看修改
绿色的5
位字符表示提交的ID
,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD
标识。 这张图片里显示最后5
次提交,ed489
是最新提交。 main
分支指向此次提交,另一个stable
分支指向祖父提交节点。
git status
:查看文件、目录在工作区间和暂存区中的状态。
git diff
:命令用于比较工作区和缓存区的区别。
git diff –cached
:比较的缓存区和本地仓库的区别。
git diff <commit>
:查看工作目录同本地仓库指定commit
的内容的差异,<commit>=HEAD
时:查看工作目录同最近一次commit
的内容的差异。
git diff <commit> <commit>
:本地仓库任意两次commit
之间的区别。
2.3 提交代码
git add [file1] [file2] ...
:将工作区文件或目录提交到暂存区。git commit [file1] [file2] ... -m [message]
:给暂存区域生成快照并提交至本地仓库,[message]
可以是一些备注信息。
git commit -a
:-a
参数设置修改文件后不需要执行git add
命令,直接提交至本地仓库。git push <远程主机名> <本地分支名>:<远程分支名>
:从将本地的分支版本上传到远程并合并,如git push origin master:refs/for/master
,即是将本地的master
分支推送到远程主机origin
上的对应的master
分支。- 使用一次新的
commit
,替代上一次提交,提交至远程仓库也可以修改:
git commit --amend -m [message]
:代码没有任何新变化,则用来改写上一次commit
的提交信息
git commit --amend [file1] [file2] ...
: 重做上一次commit
,并包括指定文件的新变化
2.4 更新代码
git pull = git fetch + git merge
git pull <远程主机名> <远程分支名>:<本地分支名>
:更新远程仓库中的代码到本地工作区间,如git pull origin master:brantest
,将远程主机 origin
的 master
分支拉取过来,与本地的 brantest
分支合并,如果远程分支是与本地的当前分支合并,则冒号后面的部分可以省略。
git fetch
<远程主机名> <分支名>:将远程主机的最新内容拉到本地仓库,用户在检查了以后决定是否合并到工作区间分支中。
git merge [branch]
:合并指定分支到当前分支。
2.5 版本回退或代码撤销
checkout
命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。
git checkout -b 本地分支名 origin/远程分支名
:将远程git仓库里的指定分支拉取到本地(本地不存在的分支)。git checkout -- files
:(暂存区 -> 工作区间)工作区间修改了文件,但是还没有提交到暂存区,可用该命令把文件从暂存区域复制到工作目录,用来丢弃本地修改。
reset
命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。如果不给选项,那么当前分支指向到那个提交。如果用--hard
选项,那么工作目录也更新,如果用--soft
选项,那么都不变。
git reset HEAD file
:(本地仓库 -> 暂存区)工作区中修改了文件且git add到暂存区,但是尚未commit,可用该命令把提交至暂存区的文件撤销,重新放回工作区,也可以用git reset 撤销所有暂存区域文件。git reset --hard HEAD^ file
:回退工作区中的文件到提交至本地仓库中的上一个提交版本。HEAD:最新提交 HEAD^:上一个提交版本 HEAD^^:上上一个提交版本 HEAD~10:往上10个版本
三、查看提交历史信息:
git log [<options>] [<file>]
:查看历史提交记录。
--stat
:显示commit
历史,以及每次commit
发生变更的文件,如git log --stat lj_emit_mips.h
-S [keyword]
:根据关键字搜索提交历史
-5 --pretty --oneline
:显示过去5
次的提交记录git blame <file>
:以列表形式查看指定文件每一行代码的历史修改记录。
四、分支管理:
4.1 列出分支
git branch
:列出所有本地分支。
git branch -r
:列出所有远程分支。
git branch -a
:列出所有本地分支和远程分支
4.2 新建分支
git branch [branch-name]
:新建一个分支,但是依旧停留在当前分支
git checkout -b [branch]
:新建一个分支,并切换到该分支
git branch [branch] [commit]
:新建一个分支,指向指定commit
git branch --track [branch] [remote-branch]
:新建一个分支,与指定的远程分支建立追踪关系
4.3 切换分支
切换到指定分支的时候,Git会用该分支的最后提交的快照替换你工作目录的内容, 所以多个分支不需要多个目录。
git checkout -
:切换到上一个分支。
git checkout [branch-name]
:切换到指定分支。
4.4 合并分支
merge 命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。 另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。
步骤为:先合并->解决冲突->git add 冲突文件至暂存区->git commit至本地仓库->git push至远程仓库
git merge [branch]
:合并指定分支到当前分支
4.5 删除分支
Git会自行负责分支的管理,所以当我们删除一个分支时,Git只是删除了指向相关提交的指针,但该提交对象依然会留在版本库中。
git branch -d [branch-name]
:删除一个没有被打开的分支
git branch -D <branch_name>
:删除一个正打开的分支
git branch <branch_name> <hash_val>
:在已知提交的散列值的情况下恢复某个分支