赞
踩
通过 git init
初始化,可以把当前目录变成 Git 可以管理的本地仓库。目前仅仅是做了一个初始化 Git 仓库的操作,项目里的文件还没有交由 Git 仓库来管理。
git init
初始化后会在当前目录下会出现一个名为.git
的目录,这个就是 Git 仓库的核心。
如果没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
.git
不算工作区,而是 Git 的版本库。用来实实在在存储代码及其历史版本。.git
目录下的 Index 文件。用来临时存储代码。可以将文件划分成不同的状态,来确定该文件是否已经添加到 Git 仓库管理中。
git init
命令把这个目录变成 Git 可以管理的本地仓库。在当前目录下新建一个文档。
使用 git add xxx.xx
命令,把工作区的文件添加到暂存区,将文件状态由未跟踪变为已跟踪。
查看
.git/index
文件 和.git/objects
下的文件可以发现都有了一条记录。这说明:git add
是先将工作区的修改做成 git 对象放到版本库,然后再从版本库中拿出来放到暂存区中。
在版本库中只能跟踪和管理文本文件,比如 txt 文件、js 文件、php 文件、java 文件等,所有的程序代码都可以的。但是像视频、图片等这些二进制文件,虽然能由 git 管理,但是只能记录大小,无法跟踪具体修改了什么。
git add .
将所有文件添加到暂存区。
可反复多次使用git add
添加多个文件,通过git commit
一次提交。
使用 git commit -m "xxxxx"
命令,将暂存区的文件提交到本地仓库中。
-m
后面的是本次提交的说明信息。
使用git commit -a -m "xxxxx"
可以将get add
和git commit
两个命令简化成一个命令。
在每次提交中,Git 都会通过 SHA-1 散列算法生成校验和。校验和是一个由 40 位十六进制组成的字符串,基于 Git 中的文件内容和目录结构计算出来。校验和可以作为提交的唯一 id 用来标识本次提交;也可以通过校验和索引出来本次提交的所有文件。
git status
用来查看工作区和暂存区的状态。
git init
初始化之后,git status
查看一下状态,终端显示如下信息:On branch master // 当前为 master 分支
No commits yet // 本地仓库还没有任何提交
nothing to commit (create/copy files and use "git add" to track) // 暂存区没有什么可提交的
index.txt
文件,然后 git status
查看一下状态,终端显示如下信息:On branch master // 当前为 master 分支
No commits yet // 本地仓库还没有任何提交
Untracked files: // 工作区中还没有被跟踪的文件,也就是还没有被 add 的文件,add 之后将会进入暂存区
(use "git add <file>..." to include in what will be committed)
index.txt
nothing added to commit but untracked files present (use "git add" to track) // 暂存区没有任何提交,但是工作区存在没有被跟踪的文件
git add index.txt
将 index.txt
add 到暂存区,然后 git status
查看一下状态,终端显示如下信息:On branch master // 当前为 master 分支
No commits yet // 本地仓库还没有任何提交
Changes to be committed: // 暂存区将要被提交的修改,也就是已经从工作区 add 到暂存区中的文件,commit 之后将进入本地仓库
(use "git rm --cached <file>..." to unstage) // 使用 ”git rm --cached <file>“ 将从暂存区删除并取消跟踪文件,恢复到 add 之前的状态
new file: index.txt
git commit -m 'commt index.txt'
将 index.txt
提交到本地仓库,然后 git status
查看一下状态,终端显示如下信息:On branch master // 当前为 master 分支
nothing to commit, working tree clean // 暂存区没有什么可提交的,工作区的树也是干净的
index.txt
文件的内容,然后 git status
查看一下状态,终端显示如下信息:On branch master // 当前为 master 分支
Changes not staged for commit: // 工作区有还没暂存的修改
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory) // 可以使用 "git restore <file>..." 丢弃在工作区的修改
modified: index.txt
no changes added to commit (use "git add" and/or "git commit -a") // 暂存区没有被添加的修改,也就是这个文件在工作区、暂存区都存在,在工作区进行了一些新的修改,但是这部分修改还没 add 到暂存区
git reset
用来进行当前分支上的版本的前进与回退。
git log
查看的是当前分支的 commit 提交记录。
gti reset
回退的也是当前分支的 commit 提交。
git status
查看状态的操作的基础上,将 index.txt
修改的内容也提交到本地仓库。git log
查看当前分支 commit 提交的历史记录, 终端显示如下信息:
git log
不会对版本回退做记录,git reflog
会对所有版本记录做记录。
commit 7d32b404e1c71fd4ed66a4e22d70b265bee9d307 (HEAD -> master) // 7d32b404e1c71fd4ed66a4e22d70b265bee9d307 哈希值为当次提交的 commit id 校验和 Author: test <test@163.com> Date: Thu Sep 30 16:22:22 2021 +0800 second commit:index.txt commit bbeac607be274343dc74099887b9cee40e50d3a3 Author: test <test@163.com> Date: Thu Sep 30 11:13:15 2021 +0800 BAN first commit:index.txt // 或者使用 git log --pretty=oneline,来让每一条日志只显示一行,更加简洁 7d32b404e1c71fd4ed66a4e22d70b265bee9d307 (HEAD -> master) second commit:idex.txt bbeac607be274343dc74099887b9cee40e50d3a3 first commit:index.txt // 或者使用 git log --oneline,不仅可以让每一条日志只显示一行,而且缩短了哈希值,更加简洁 7d32b40 (HEAD -> master) second commit:idex.txt bbeac60 first commit:index.txt // 或者使用 git reflog 7d32b40 (HEAD -> master) HEAD@{0}: commit: second commit:idex.txt bbeac60 HEAD@{1}: commit (initial): first commit:index.txt // HEAD@{1} 表示移动到当前版本需要1步
// 1. 使用 commit id 校验和去操作(推荐):git reset --hard bbeac60
HEAD is now at bbeac60 first commit:index.txt
// 此时,再 git reflog 查看一下历史记录:
bbeac60 (HEAD -> master) HEAD@{0}: reset: moving to bbeac60
7d32b40 HEAD@{1}: commit: second commit:idex.txt
bbeac60 (HEAD -> master) HEAD@{2}: commit (initial): first commit:index.txt
// 2. 使用 ^ 符号去操作:git reset --hard HEAD^(需要后退几步就写几个 ^ 符号。只能后退不能前进)
// 3. 使用 ~ 符号去操作:git reset --hard HEAD~1(需要后退几步就写几。只能后退不能前进)
git diff 【文件名】
:比较的是此文件工作区和暂存区的区别。不带文件名比较的是所有文件。
git diff 【本地仓库中的某个历史版本】 【文件名】
:比较的是此文件工作区与本地仓库中某个历史版本的区别。不带文件名比较的是所有文件。
add.txt
文件并输入一些内容,执行 git add add.txt
。add.txt
文件的内容,然后执行 git diff index.txt
, 终端显示如下信息:
Git 是以行为单位来管理文件的。
diff --git a/add.txt b/add.txt
index a8500fc..b544c22 100644
--- a/add.txt
+++ b/add.txt
@@ -1,3 +1,3 @@
qqq
-www // 减号代表删除的行
+wwwwww // 加号代表增加的行
eee
git stash
:会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前的工作目录。
想删掉文件又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交,这时就可以考虑
git stash
。
git stash save "xxx"
取代 git stash
命令。git stash pop
命令恢复之前储藏的工作目录。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。