前言
现在Git已经是一个很常用的工具了 ,工作中经常会用到,有时候面试也会问会不会使用git,所以特地写了这篇博客来为初学者讲解如何使用git。里面只涉及到简单的git操作,不过应付日常工作还是绰绰有余的。
1.Git简介
Git是一个分布式版本控制系统,用于跟踪计算机文件的更改,特别是在源代码中,它是由Linus Torvalds 在 2005 年创立,最初是为了支持 Linux 内核开发。
工作流程:
workspace:工作区
Index/Stage:暂存区
Repository:本地仓库
Remote:远程仓库
2.安装git
windows中:从网上下载一个,按照默认的方式进行安装即可。安装完成以后右键显示有Git Bash here即表示安装成功。
(ps:如果想偷懒或者找不到如何下载,可以直接找我来拿安装包)
配置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"
git config --list #可以查看当前git的配置
#--global表示配置的是全局的
注意:这个配置只是一种标识,标记你从这里上传的代码。
为当前仓库指定用户名和邮箱
1.打开终端或者命令行,导航到对应的Git仓库
cd /path/to/your/repo
2.设置用户名
git config user.name "Your Name"
3.设置邮箱
git config user.emial "your.email@example.com"
注意配置成功以后,使用 git config --list进行查看的时候,user.name和user.email是最后的那个才是该仓库的,之前全局的那个应该是空的,需要翻到最下面才能看到。
3.创建版本库(代码仓库)
版本库就是版本仓库或者也可以叫做仓库,顾名思义,它就是装东西的,它和普通的仓库不一样的地方是:它是用来装文件的。
那这个仓库是如何管理文件的呢,当然是通过git这个工具了,至于其中的原理这里就不做过多的解释,有兴趣的朋友可以看看这个去深入的了解Git。
现在我想要在D盘的code\test目录下创建一个版本库,该如何做呢?
首先需要进入code\test目录,然后唤出git的命令行工具。
使用git init命令即可创建一个新的版本库/代码仓(后续都会将之称为代码仓)。
这时候,你会看到test文件夹下会多出一个新的目录,.git目录,这个目录就是用来管理刚刚新建的这个代码仓的。
刚刚创建好以后的代码仓库是空的,这时候就可以使用命令git add和git commit为添加文件进行版本控制了。
如下,加上现在添加一个test1.txt文件。
现在test.txt文件已经添加到本地仓库了。Git会追踪这个文件的更改。
git status 命令可以显示当前代码仓的状态。它会告诉你下面的这些信息:
1)当前分支,显示当前处于哪一个分支
2)文件的状态
哪些文件已修改,但未暂存(stage红色字体)。
哪些文件已修改,且暂存(绿色字体)。
哪些文件未跟踪(untracked)。
3)提出建议,会给出执行下一步的建议
例如再新建一个test1文件:
执行git add test1.txt 以后再查看:
现在test1.txt文件已经在暂存区了,如果想要将它提交的本地仓库只需要使用git commit命令,如果想要将从暂存区移除,放回到工作区,只需要使用git restore --staged 命令即可。
现在先将test1文件加入版本控制,并且为里面添加一段文本比如"hello xxx";再去查看它的状态。
如果想要添加到本地仓库可以直接使用git add和git commit命令,如果想要撤销工作区的修改,可以使用git restore test1.txt 既可。这里使用git commit命令以后再去查看当前仓库的状态。
4.常用的git命令
git clone #克隆远程仓库到本地
git init #初始化一个仓库
git remote add origin <远程仓库的URL> #关联本地仓库和远程仓库
git remote -v #查看关联结果
git config user.name "your name" #为当前仓库添加用户名
git config user.email "your *@exmple.com" #为当前仓库添加邮箱
git add #将文件或目录添加但暂存区
git commit #将暂存区的更改添加但本地仓库
git push #将本地仓库的新增内容推送到远程->用于同步操作
git pull #拉取远程仓库的内容->用于同步操作
git log #查看仓库的提交日志
git reset #回退提交
--soft <commit_hash> #软回头,保存暂存区和工作区的更改,会报保存历史提交信息
--mixed <commit_hash> #混合回退,回退到某个提交,并取消暂存区的更改,但保留工作区文件的修改
--hard <commit_hash> #硬回退,回退到某个提交,并丢弃所有更改(包括暂存区和工作区的更改)
git revert #回退特定提交,不改变历史。与git reset不同,git revert会生成一个新的提交来撤销某次提交的修改,适用于不想修改历史情况,尤其是与他人协作时
git checkout #用法很多
git checkout <commit_hash> -- <fileName> #恢复某个特定文件或者文件夹到某个提交的版本
git checkout -b <branch_name> #切换到某个分支
git checkout <commit_hash> -- .#恢复所有的文件到某个提交状态,
git checkout -- <file_path> #撤销某个文件未提交的更改 ,git checkout -- . 撤销所有文件未提交的更改
git restore #和git checkout用法类似
git restore --source=<commit_hash> <file_path> #恢复特定文件到某个提交的版本
git restore --source=<commit_hash> ./ #恢复所有文件到某个提交版本
git restore <file_path> #撤销工作区的更改
git restore . #撤销所有工作区的更改
git restore --staged <file> #将文件从暂存区移除
#分支相关的命令
git branch #查看本地所有的分支
git branch -r #查看远程所有的分支
git branch -a #查看所有的分支
git branch <name_branch> #新建name_branch分支
git checkout <name_branch> #切换到name_branch分支
git checkout -b <name_branch> #新建并切换到name_branch分支
git checkout -d/-D #删除分支,-d是删除已经合并的分支,-D强制删除一个分支,即使它还未合并
git merge <name_branch> #将name_branch分支合并到当前分支,合并时,如果出现冲突需要手动解决冲突
git log --graph --oneline --all #查看分支的合并历史
git push origin <name_branch> #将name_branch分支推送到远程
git branch --set-upstream-to=origin/<name_branch> <name_branch> #设置远程分支和本地分支分支的跟踪关系,以后在这个分支上提交代码,push和pull的时候就不需要指定远程分支名称
git branch -vv #查看本地分支和远程分支的关联信息
git stash #将当前工作区和暂存区的更改保存起来,保存到一个栈中
-k #只暂存工作区的更改
save "message" 添加暂存信息
list #查看所以已保存的stash列表
apply #恢复最近一次的暂存
pop #恢复最近一次的暂存,并且在栈中删除这次暂存
drop #删除某个特定的stash
clear #删除所有的stash
git ls-files #查看当前仓库中被纳入版本控制的文件
#注意这些命令并不需要死记,多敲几遍,知道在哪个场景下需要哪些命令即可,还可以使用git help去查看git的帮助手册,其实记住最后一条就够了
5.实践操作(👌一看就会)
上面我们已经新建了一个代码仓,并将test.txt和test1.test文件加入版本控制,现在我们可以查看当前仓库中被追踪的文件使用git ls-files 。
现在为test1.txt文件添加一行文本:"123456", 使用git status,查看:
5.1查看文件改动 git diff
如何查看test1.txt文件发生了哪些改动呢?
可以使用diff命令
作为版本控制系统Git可以跟踪文本文件的改动,比如txt文件,代码文件等,但是对于图片,视频等这些二进制文件Git只能跟踪它们的变化,无法知道这些二进制文件更改了哪些内容。
5.2查看历史历史提交记录和版本操作
将这次test1.txt文件的更改提交到本地仓库,使用git log命令查看提交历史。
如果我们想要回退到上一次提交,也就是进行版本回退,该如何做呢。使用git reset命令进行,根据需求选择硬回退,软回头或者混合回退。在这里使用硬回退,git reset --hard HEAD^ ,这个命令就可以回退到上一个版本,如果想要回退到上上个版本,多加一个^,git reset --hard HEAD^^,或者使用git reset --hard HEAD~2
如果想要撤销刚刚回退的版本,该如何操作呢,首先需要使用git reflog 获取版本信息。
使用git reset --hard +版本信息编号即可成功撤销刚刚回退的版本。
5.3工作区和暂存区的理解
工作区就相当于版本库目录下除了.git目录以外所有的文件目录和文件。暂存区在版本库下隐藏的.git/index文件中。
我们是通过命令来操作这两个地方的。git add命令会将工作区文件中的更改添加到暂存区,git commit命令会将暂存区的文件上传到本地仓库。举个🥔,如下:
5.4撤销修改,删除文件,将文件移除版本控制。
此时test1.txt文件中的内容有三行,如图:
如果给这个文件再新增一行 "test"文本,它就是变成四行文本。此时我们想要撤销这次修改,有以下几种方式:
第一种,如果我们知道要删除哪些内容直接打开文件编辑器进行删除即可。
第二种,可以直接使用版本回退(硬回退),直接恢复到上一个版本,并丢弃工作区的更改。
第三种,使用git checkout -- test1.txt,丢弃test1.txt文件工作区的修改(命令中的-- 别丢)
git checkout -- 只能丢弃文件在工作区的更改,如果文件的更改已经添加到暂存区了,改怎么撤销暂存呢?
使用 git restore --staged 命令 ,如下:
如果想要删除文件,该如何操作呢,可以直接删除。
如果想要撤销刚刚的删除操作可以使用git checkout -- 命令。
如果想要删除以后,将文件移除版本控制(跟踪),可以使用add和commit命令。
5.5分支操作
当我们初始化一个仓库以后就会存在一个master分支。在仓库中存在一个HEAD指针,它指向的就是当前所在的分支。当前指向的是master分支。
使用git branch 命令可以生成一个新的分支。
通过git checkout 命令 可以切换分支。
在新的分支上,也可以进行开发工作,并且提交代码到仓库中。
此时再次切换回master分支。
再次查看master分支的提交记录:
其实将这些串联起来就是一条时间线对应的事件。切换到dubug_branch分支再次查看提交记录:
可以看到这两个分支的提交记录有一部分是相同的但是最近几条是不一样的,因为新建的分支debug在master分支下新建的,所以会克隆master分支中的信息。master分支也叫基线分支,是一个项目中最稳定最成熟的分支。如果现在想要将debug分支合并到master分支改如何操作呢?可以直接使用分支合并命令:git merge 。合并分支时,可能会存在冲突。
如何解决冲突呢,我们可以先打开冲突的文件。
(你当前分支的内容)
=======
(合并分支的内容)
>>>>>>> branch-name
保存文件以后,使用add 和 commit命令进行提交即可。
5.6远程仓库
这里在gitee上找一个代码仓库做一下简单的演示。(不涉及变基和强制推送等操作,🤯不建议初学者使用变基和强制推送等不安全的操作)
搜索gitee找到,点进去新建一个个人账号,如果个人账号之前就要直接登录即可。
先新建一个仓库,在再配置公钥。
注意事项看下面的图片说明:
使用git remote 命令可以将本地仓库和远程仓库关联起来。
已经关联仓库以后,我们就可以将本地仓库中文件同步到远程仓库了。
其实刚刚接触的同学,最难的地方就在于多人协作。在这里简单的演示一下多人协作。
后续有内容会继续更新(工作好累),拜~