有关git的使用

it2025-03-25  10

git的安装及使用

1,检查是否有git相关软件包

[root@localhost /]# git usage: git [--version] [--help] [-c name=value] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>] 最常用的 git 命令有: add 添加文件内容至索引 bisect 通过二分查找定位引入 bug 的变更 branch 列出、创建或删除分支 checkout 检出一个分支或路径到工作区 clone 克隆一个版本库到一个新目录 commit 记录变更到版本库 diff 显示提交之间、提交和工作区之间等的差异 fetch 从另外一个版本库下载对象和引用 grep 输出和模式匹配的行 init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库 log 显示提交日志 merge 合并两个或更多开发历史 mv 移动或重命名一个文件、目录或符号链接 pull 获取并合并另外的版本库或一个本地分支 push 更新远程引用和相关的对象 rebase 本地提交转移至更新后的上游分支中 reset 重置当前HEAD到指定状态 rm 从工作区和索引中删除文件 show 显示各种类型的对象 status 显示工作区状态 tag 创建、列出、删除或校验一个GPG签名的 tag 对象 命令 'git help -a''git help -g' 显示可用的子命令和一些指南。参见 'git help <命令>''git help <指南>' 来查看给定的子命令帮助或指南。 [root@localhost /]#

2,创建版本库(保存备份文件的位置)

[root@localhost /]# mkdir learngit [root@localhost /]# cd learngit [root@localhost learngit]# git init 初始化空的 Git 版本库于 /learngit/.git/ [root@localhost learngit]# vim read.txt [root@localhost learngit]# ll 总用量 4 -rw-r--r--. 1 root root 46 10月 21 20:14 read.txt [root@localhost learngit]# ls read.txt [root@localhost learngit]# git add read.txt [root@localhost learngit]# git commit -m "wrote a read file" [master(根提交) 1ee8e64] wrote a read file Committer: root <root@localhost.localdomain> 您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确 与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息: git config --global user.name "Your Name" git config --global user.email you@example.com 设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份: git commit --amend --reset-author 1 file changed, 2 insertions(+) create mode 100644 read.txt

3,随意修改一次之前的read文件,并查看当前工作区和缓存区情况(git status)

[root@localhost learngit]# vim read.txt [root@localhost learngit]# git status # 位于分支 master # 尚未暂存以备提交的变更: # (使用 "git add <file>..." 更新要提交的内容) # (使用 "git checkout -- <file>..." 丢弃工作区的改动) # # 修改: read.txt # 修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@localhost learngit]# git diff read.txt diff --git a/read.txt b/read.txt index 0890443..2edd51b 100644 --- a/read.txt +++ b/read.txt @@ -1,2 +1,2 @@ -git is a control system. git is free software +git is a distributed version control system [root@localhost learngit]#

这里要区分一下add和commit,正常来说,使用者是修改或正在使用一份a。而版本库中的是老版本c,在你add的时候有一个缓存区,是把你当前这份a,add到缓存区形成b,但是版本库并没有同步,你这时候使用diff,会看到并没有修改数据的记录。只有当你commit的时候才同步到版本库。commit后你的版本库才变成b,而a还在修改者这里继续接受整改。这里要额外提出一个警告,当你add一份错误文件的时候是没有关系的,你可以从版本库还原最后版本再从头修改,但是当你删除!版本库中的文件时,是无法还原的。会把你所有“版本”的文件全部删除。所以一定一定不要删除版本库中的文件,在其他时间。git可以做到很多后悔药让你吃。还是很香的。

怎么使用备份呢?接下来介绍

git log git reset --hard HEAD ***现在是回溯到当前版本,加上^回溯上一个版本 git statu git log --pretty=oneline ###查看版本序列号(序列号随机生成)

这里没有加入^所以是回溯到当前版本

回溯到上个版本(如果想回溯2个版本就打两个^) 当你回溯错误后,或者想回溯到指定版本时,上边用到的查看序列号就用到了

当你回溯错误后发现你之前的版本是对的,你想回溯回去也可以这么做

上图你可以看到你回溯版本未来的版本(前边时回溯序列号)

当你想查看当前版本和版本库的最新版本有什么区别的时候

丢弃工作区文件

就是让这个文件回到最近一次git commit或git add时的状态。 意思就是说add到缓存区如果有文件那么回溯到add缓存区的版本。同时add缓存区的文件也会清空(你再次使用同样代码那么就回到版本库的最新版了,你的add缓存区的文件也会清空) 如果add缓存区没有文件,那么回溯到版本库最新版本。 只要你不commit到版本库那么你都是可以撤回的

当你删除文件的时候呢?

这时候使用git rm并且git commit就可以从版本库中完全删除文件了。只要你不git commit 你可以使用git reflog查看版本号恢复然后gitcommit恢复。

在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并 所以Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

git branch dex ###不加名称时是显示所有分支加名称是切换 git checkout dex ###建立一个分支为 dex git checkout -b dex ###合并前边2个语令

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward

在这里讲述一下checkout,当你使用git checkout --(文件名)撤销时和切换分支是用的相同语令checkout 但是–改变了语令效果 版本太低的时候git switch (分支名)会无效

现在你的master和dex是出于同一节点你可以删除dex了

如果两个分支在同一个节点提交(add到缓存区)会怎么样呢?git会提示你提交冲突并要求你更改,你这时候更改的所在的分支提交会变成最新的版本,换种方式解释,当你commit到缓存区的版本永远是最新版,当你add到缓存区的文件不一定是最新版,git会提示你add到缓存区的文件冲突或者相同,这时候你更改的或者当前commit到缓存区的文件,就会被版本库认定为最新版本。如下图

提交重复文件会提示相同需要修改。修改过后就可以提交了 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

在dex分支写一个readme.txt并提交commit

然后切到master后合并分支并使用–no-ff参数,表示禁用Fast forward 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

合并后,我们用git log看看分支历史 发现变成了这样 当你在dev上工作时候master线上出现了bug需要修复,而你手上dev的文件还不能commit到版本库,你可以使用stash创建一个临时分支在master上保存你dev中的工作区文件,等你修复master上的错误后再恢复dev的文件继续编辑 临时分支为issue-101在master上

下图切换回master并合并,最后删除issue-101分支

修复master上错误后怎么恢复呢? 切换回dev,使用git stash apply恢复,你可以看下git status是干净的 这里工作区文件已经恢复了

有关标签的使用 删除标签

最新回复(0)