主要参考自链接: 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 "xxx@email.cn"
二、基本操作:
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 [file1] ... : 有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录,或者你上一次的 commit message 的描述有误,这时候你可以使用接下来的这个命令,如果打算把暂存区所有的文件都提上去,可以不用加[file1] ,提交完后再使用git push origin HEAD:refs/for/larch64 推上远程仓库。
2.4 更新代码
git pull <远程主机名> <远程分支名>:<本地分支名> :更新远程仓库中的代码到本地工作区间,如git pull origin master:brantest ,将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并,如果远程分支是与本地的当前分支合并,则冒号后面的部分可以省略。git pull = git fetch + git merge
git fetch <远程主机名> <分支名>:将远程主机的最新内容拉到本地仓库,用户在检查了以后决定是否合并到工作区间分支中。 git merge [branch] :合并指定分支到当前分支。
[loongson@bogon luajit]$ git fetch origin larch64
来自 ssh://rd.loongson.cn:29418/luajit
* branch larch64 -> FETCH_HEAD
[loongson@bogon luajit]$ git merge FETCH_HEAD
更新 bbb6188..644fafd
Fast-forward
src/lib_jit.c | 2 +-
src/lj_asm_loongarch64.h | 6 +++---
src/lj_jit.h | 6 +++---
src/vm_loongarch64.dasc | 5 +++++
4 files changed, 12 insertions(+), 7 deletions(-)
git fetch origin larch64:temp
git diff temp
git merge temp
git branch -d temp
2.5 版本回退或代码撤销
checkout 命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。
git checkout -b 本地分支名 origin/远程分支名 :将远程git仓库里的指定分支拉取到本地(本地不存在的分支)。git checkout -- files :(暂存区 -> 工作区间)工作区间修改了文件,但是还没有提交到暂存区,可用该命令把文件从暂存区域复制到工作目录,用来丢弃本地修改。
reset 命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。如果不给选项,那么当前分支指向到那个提交。如果用--hard 选项,那么工作目录也更新,如果用--soft 选项,那么都不变。
三、查看提交历史信息:
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> :在已知提交的散列值的情况下恢复某个分支
|