【Git】常用操作--创建、提交、撤销
本文主要介绍了Git的基础操作,例如仓库的创建,仓库中文件状态的查看,添加暂存区,提交,查看文件修改内容等操作,还介绍了历史记录的查询和版本的回滚操做
文章目录
Git基础操作
创建Git仓库
打开需要创建仓库的位置,右键选择Git Bash Here
打开Git命令界面输入git init
创建仓库
创建完成后得到提示Initialized empty Git repository in E:/02.Studio/json/.git/
已初始化空的Git仓库在当前目录中,同时可以看到目录中多出来.git
文件夹(一般为隐藏文件夹)。
查看仓库文件状态
使用git status
可以看到当前仓库的文件修改和未提交文件情况
向暂存区中添加文件
使用git add [fileName ...]
用于将文件添加至暂存区中
若未提示信息则表示文件添加成功。
添加文件需要填写正确的文件路径,若需要添加多个文件使用空格分隔
查看暂存区状态
使用git status
可以查看当前仓库中文件状态
其中Changes to be committed
为暂存区已存在,需要进行提交进仓库的文件;Changes not staged for commit
为文件被操作尚未提交至暂存区的文件,此类文件需要使用add
将其添加至缓存区再提交进仓库;Untracked files
为未暂存区文件
当修改后的文件添加至暂存区后,在提交之前再次进行修改后,非暂存区会再次出现该文件,需再次
add
添加入暂存区,否则直接commit
后仓库中的文件不会包含二次修改的内容
提交暂存区文件
使用git commit -m "description"
用于将已添加到暂存区的文件进行提交,每次提交可提交多个文件。
从仓库中移除文件
当从磁盘删除已提交给仓库中的文件时,由于仓库缓存中还存在该文件所以使用git rm [fileName]
删除缓存中的文件,再提交后该文件就不再纳入版本管理了。
若当前操作为误操作还可以通过回滚操作找回文件
如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f(译注:即 force 的首字母)
若由于误操作将一些非必要文件提交至仓库,可以使用--cached
,只删除仓库中的记录并不从磁盘上删除。
git rm
命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。例如:git rm log/\*.log
注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。
设置忽略文件
对于一些日志文件、临时文件以及一些软件生成的配置或输出文件并不需要进行文件管理,所以可以创建一个.gitignore
文件将需要忽略的文件名称或表达式写入.gitignore
文件,以实现忽略文件的目的。
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
git同样支持Glob模式,Glob模式为Shell中简化的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
查看文件的修改内容
使用git status
只能查看每个文件的修改状态,但是无法看到每个文件的内容有哪些被修改,所以可以使用git diff
查看所有追踪文件的修改对比。
由输出内容可以看出README.md文件增加了三行内容。
需要注意的是,
git diff
是查看未暂存的文件中被修改的内容,当将该文件添加入暂存区后就无法再通过git diff
就无法再查看修改内容,需要使用git diff --cached
移动文件
当需要重命名文件时,可以使用git mv [oldFileName] [new FileName]
。Git对于重命名操作会分为三步进行,第一步首先重命名文件,然后再从仓库中删除原有的文件,最后将新文件添加进暂存区等待提交。
$ mv README.md LOOKME.md
$ git rm README.md
$ git add LOOKME.md
若通过软件进行批量修改文件时,也要按照该流程先删除原文件再添加新文件
查看历史操作
如果想要查看某个项目中所有提交信息,可以使用git log
打印所有参与者的提交记录。
每条记录都会显示提交的SHA-1 校验,作者名字和作者邮箱以及提交时间并按提交时间倒序排列。
除了简单的git log
外还可以添加参数用于筛选和格式化输出信息:
-p --patch
:它会显示每次提交所引入的差异。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交。--stat
:在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。--pretty
:这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一;使用formart可以自定义打印的格式
short | full | fuller | |
---|---|---|---|
作者名称及邮箱 | Y | Y | Y |
作者修改时间 | Y | ||
提交者名称及邮箱 | Y | Y | |
提交者提交时间 | Y |
formart常用格式信息如下:
选项 | 描述 |
---|---|
%H | 提交信息中完整哈希值 |
%h | 提交信息中简写哈希值 |
%T | 树的完整哈希值 |
%t | 树的简写哈希值 |
%P | 父提交的完整哈希值 |
%p | 父提交的简写哈希值 |
%an | 作者名字 |
%ae | 作者电子邮件地址 |
%ad | 修订日期(可以用--date=yyyy-MM-dd 来指定格式) |
%ar | 修订日期(按多久以前的方式显示) |
%cn | 提交者姓名 |
%ce | 提交者电子邮件 |
%cd | 提交日期 |
%cr | 提交日期(距今时间跨度) |
%s | 提交说明 |
示例:
# 将日志信息显示在一行上
$ git log --pretty=oneline
35c49cc6f44b29f4eaa118fef089fca9de34d947 (HEAD -> master) commit mkdir
0fd3ed9d56e4413f4ce0ea638c012e5971c34a4f add a file
4b96f607793fe5bbcbd2547025b058c0f0a39cc7 remove file from repository
4f9705213bdc1ea71fa14eca80aa5771bca1766a remove README.md and add file
a5d5fb80746aa0fc5915ee08bb66adc8685d0160 commit README.md
# 以short格式输出仓库修改信息
$ git log --pretty=short
commit 35c49cc6f44b29f4eaa118fef089fca9de34d947 (HEAD -> master)
Author: DoGH <........@qq.com>
commit mkdir
commit 0fd3ed9d56e4413f4ce0ea638c012e5971c34a4f
Author: DoGH <........@qq.com>
add a file
# 以full格式输出仓库修改信息
$ git log --pretty=full
commit 35c49cc6f44b29f4eaa118fef089fca9de34d947 (HEAD -> master)
Author: DoGH <........@qq.com>
Commit: DoGH <........@qq.com>
commit mkdir
commit 0fd3ed9d56e4413f4ce0ea638c012e5971c34a4f
Author: DoGH <........@qq.com>
Commit: DoGH <........@qq.com>
add a file
# 以fuller格式输出仓库修改信息
$ git log --pretty=fuller
commit 35c49cc6f44b29f4eaa118fef089fca9de34d947 (HEAD -> master)
Author: DoGH <........@qq.com>
AuthorDate: Fri Jul 9 16:43:07 2021 +0800
Commit: DoGH <........@qq.com>
CommitDate: Fri Jul 9 16:43:07 2021 +0800
commit mkdir
commit 0fd3ed9d56e4413f4ce0ea638c012e5971c34a4f
Author: DoGH <........@qq.com>
AuthorDate: Fri Jul 9 16:12:21 2021 +0800
Commit: DoGH <........@qq.com>
CommitDate: Fri Jul 9 16:12:21 2021 +0800
add a file
修改文件人员与提交文件人员可以不是同一个人,所以在查询日志时会区分修改人与提交人
撤销操作
当由于一些操作失误提交了或修改了文件内容时,还可以通过Git的回滚操作,回到修改之前的状态
撤销暂存区文件
使用git restore --staged [fileName]
或git reset HEAD [fileName]
可以将暂存区文件恢复
撤销对文件的修改
使用git checkout -- [fileName]
可以将该文件回滚到上一次提交的状态。
请务必记得
git checkout -- <file>
是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)