一、介绍
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
二、下载安装配置
2.1 下载地址
2.2 配置
//配置个人名字和邮箱地址
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
三、Git使用
3.1 创建本地版本库(仓库)
进入所需要设置为版本库的目录路径,使用命令git init
。生成的.git文件是用于跟踪管理版本库,一般不要去修改。
//新建文件夹learnGit
PS H:\> mkdir learnGit
PS H:\> cd .\learnGit\
//将该文件夹设置为Git版本库
PS H:\learnGit> git init
Initialized empty Git repository in H:/learnGit/.git/
3.2 通过Git进行版本管理
在项目开发过程中,当项目功能完成的时候我们都可以更新到版本库中。如下图所示,我们放在文件中的项目或文件是在工作区中。当执行git add <file>
时,将工作区的项目/文件加入到stage暂存区中 (注意此时添加的文件并没有进入版本库管理)。当进行git commit -m 'xx'
才是将暂存区的内容提交当前分支中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7OIotu0-1587006367893)(//stopping.top:8081/view/5e9714575fcf542bec0752ad ‘‘图片title’’)]
下面介绍基础的内容提交到分支的基本流程:
(1)在工作区中新建文本文件测试
PS H:\learnGit> cat .\test.txt
Hello Git!
(2) 将内容添加到暂存区中 git add <file>
PS H:\learnGit> git add .\test.txt
(3) 查看版本库的状态 git status
PS H:\learnGit> git status
On branch master//主分支
//存在新文件test.txt 还没有提交
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.txt
(4) 将暂存区的内容提交到版本库进行管理 git commit -m 'msg'
PS H:\learnGit> git commit -m 'first commit'
[master (root-commit) 5c92697] first commit
1 file changed, 1 insertion(+)
create mode 100644 test.txt
查看提交内容的区别
有时候因为某些原因在下一次提交内容的时候忘记了我们修改了什么内容,可以通过git diff <filename>
对比与上一次commit的内容的区别。
(1)再次修改test.txt
文件
PS H:\learnGit> cat .\test.txt
Hello Git!
test git diff//新增内容
(2)使用命令 git diff
PS H:\learnGit> git diff
diff --git a/test.txt b/test.txt
index a8b73e0..9a7947a 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
-Hello Git<A3><A1>
\ No newline at end of file
+Hello Git<A3><A1>
+test git diff
\ No newline at end of file
版本回溯
在Git版本管理的过程中,难免会出现需要退回到之前版本的情况。
(1)通过git log --pretty=oneline
查看版本库commit id(从上到下按最近更新到最远的id排序)。HEAD指针指向的版本就是当前定位的版本。
PS H:\learnGit> git log --pretty=oneline
661f835daaa09c9f2d1f772fd8b6d8dae0560540 (HEAD -> master) test diff//第二次提交的id HEAD->master 当前指向的版本
5c92697cb13b9fb09d444efb1a58749f0539c8a8 first commit //第一次提交的id
(2)例如退回到第一次commit的版本内容 git reset --hard HEAD^
- git reset --hard HEAD^(
^
的数量表示退回到上几个版本) - git reset --hard HEAD~2 退回到上2个版本(数字表示上n个版本)
PS H:\learnGit> git reset --hard HEAD^
HEAD is now at 5c92697 first commit
(3)再次打印修改日志可以发现,HEAD指针已经指向到commit的第一个版本了,从上面提示观察也知道HEAD的指针指向了id为5c92697,即使第一次提交的版本
PS H:\learnGit> git log --pretty=oneline
5c92697cb13b9fb09d444efb1a58749f0539c8a8 (HEAD -> master) first commit
(4)查看test.txt的内容,确实回到第一个版本的内容。
PS H:\learnGit> cat .\test.txt
Hello Git!
(5)那么,若又想退回去刚刚的版本怎么处理了呢?git reset --hard HEAD^
也就只能退回到上n个版本,从log打印知道现在只有第一次commit的信息了。这个时候我们就可以从步骤一打印的commit id
进行版本回溯了。即commit id = 661f835da
.
//通过commit id 回溯版本
PS H:\learnGit> git reset --hard 661f835da
HEAD is now at 661f835 test diff
//打印日志情况
PS H:\learnGit> git log --pretty=oneline
661f835daaa09c9f2d1f772fd8b6d8dae0560540 (HEAD -> master) test diff
5c92697cb13b9fb09d444efb1a58749f0539c8a8 first commit
//内容已经恢复
PS H:\learnGit> cat .\test.txt
Hello Git!
test git diff
PS H:\learnGit>
撤销修改 -git checkout --file的使用
该命令主要是将内容撤销到最近commit或add到版本库之前的内容。大概就是写了一堆bug心烦意乱的时候直接重新开始的状态吧。
PS H:\learnGit> cat .\test.txt
Hello Git!
test git diff
test checkout
PS H:\learnGit> git checkout -- .\test.txt
//已经撤销了内容
PS H:\learnGit> cat .\test.txt
Hello Git!
test git diff
PS H:\learnGit> notepad.exe .\test.txt
如果是已经添加或者提交到版本库就没有办法通过这个命令撤销内容了。
PS H:\learnGit> cat .\test.txt
Hello Git!
test git diff
testadd checkout
PS H:\learnGit> git add .\test.txt
PS H:\learnGit> git checkout -- .\test.txt
PS H:\learnGit> cat .\test.txt
Hello Git!
test git diff
testadd checkout
PS H:\learnGit>