git 的基础
Posted chenxi67
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git 的基础相关的知识,希望对你有一定的参考价值。
1.在现有的目录中初始化仓库
[[email protected]]$ git init
2.把一个文件放到Git仓库中
第一步, 用命令git add ,把文件添加到仓库
[[email protected]]$ git add readme.txt
第二步, 用命令git commit , 把文件提交到仓库
[[email protected]]$ git commit -m "wrote a readme file" [master (root-commit) eaadf4e] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit
命令执行成功后会告诉你,1 file changed
:1个文件被改动(我们新添加的readme.txt文件);2 insertions
:插入了两行内容(readme.txt有两行内容)。
3.记录每次更新到仓库
继续修改readme.txt文件,改成如下内容:
Git is a distributed version control system. Git is free software.
运行git status 查看结果:
[[email protected]]$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")
4.查看已暂存和未暂存的修改
[[email protected]]$ git diff diff --git a/README.md b/README.md index e69de29..a34691f 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +this is new line
若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached
命令。
[[email protected]]$ git diff --staged diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29
5.提交更新
每次准备提交前,先用 git status
看下,是不是都已暂存起来了, 然后再运行提交命令 git commit
:
[[email protected]]$ git commit
-m
选项,将提交信息与命令放在同一行
[[email protected]]$ git commit -m ‘create‘ [master (root-commit) 88a09aa] create 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md
6.跳过使用暂存区域
给 git commit
加上 -a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交
[[email protected]]git commit -a -m ‘update‘ [master 86d801b] update 1 file changed, 1 insertion(+)
7.查看提交历史
[[email protected]]$ git log commit 86d801bbaa4cc560acc7c8f79a65cac85201f170 (HEAD -> master) Author: wangfeng7399 <[email protected]> Date: Tue Feb 19 18:48:48 2019 +0800 update commit 88a09aa009af29e9a784d6dbb68589f70f1c51be Author: wangfeng7399 <[email protected]> Date: Tue Feb 19 18:48:04 2019 +0800 create
-p 用来显示每次提交的内容差异, -2 来显示最近两次提交
[[email protected]]git log -p -2 commit 86d801bbaa4cc560acc7c8f79a65cac85201f170 (HEAD -> master) Author: wangfeng7399 <[email protected]> Date: Tue Feb 19 18:48:48 2019 +0800 update diff --git a/README.md b/README.md index e69de29..a34691f 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +this is new line commit 88a09aa009af29e9a784d6dbb68589f70f1c51be Author: wangfeng7399 <[email protected]> Date: Tue Feb 19 18:48:04 2019 +0800 create diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29
--pretty 指定使用不同于默认格式的方式展示提交历史, 用 oneline
将每个提交放在一行显示,查看的提交数很大时非常有用
[[email protected]]$ git log --pretty=oneline ca82a6dff817ec66f44342007202690a93763949 changed the version number 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
git log --pretty=format
常用的选项 ,列出了常用的格式占位符写法及其代表的意义。
选项 | 说明 |
---|---|
%H |
提交对象(commit)的完整哈希字串 |
%h |
提交对象的简短哈希字串 |
%T |
树对象(tree)的完整哈希字串 |
%t |
树对象的简短哈希字串 |
%P |
父对象(parent)的完整哈希字串 |
%p |
父对象的简短哈希字串 |
%an |
作者(author)的名字 |
%ae |
作者的电子邮件地址 |
%ad |
作者修订日期(可以用 --date= 选项定制格式) |
%ar |
作者修订日期,按多久以前的方式显示 |
%cn |
提交者(committer)的名字 |
%ce |
提交者的电子邮件地址 |
%cd |
提交日期 |
%cr |
提交日期,按多久以前的方式显示 |
%s |
提交说明 |
git log
的常用选项
选项 | 说明 |
---|---|
-p |
按补丁格式显示每个更新之间的差异。 |
--stat |
显示每次更新的文件修改统计信息。 |
--shortstat |
只显示 --stat 中最后的行数修改添加移除统计。 |
--name-only |
仅在提交信息后显示已修改的文件清单。 |
--name-status |
显示新增、修改、删除的文件清单。 |
--abbrev-commit |
仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
--relative-date |
使用较短的相对时间显示(比如,“2 weeks ago”)。 |
--graph |
显示 ASCII 图形表示的分支合并历史。 |
--pretty |
使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 |
在 限制 git log
输出的选项 中列出了常用的选项
选项 | 说明 |
---|---|
-(n) |
仅显示最近的 n 条提交 |
--since , --after |
仅显示指定时间之后的提交。 |
--until , --before |
仅显示指定时间之前的提交。 |
--author |
仅显示指定作者相关的提交。 |
--committer |
仅显示指定提交者相关的提交。 |
--grep |
仅显示含指定关键字的提交 |
-S |
仅显示添加或移除了某个关键字的提交 |
8.取消暂存的文件
[[email protected]]git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.md
[[email protected]]git reset HEAD README.md Unstaged changes after reset: M README.md [[email protected]]$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: README.md no changes added to commit (use "git add" and/or "git commit -a")
注意:虽然在调用时加上 --hard
选项可以令 git reset
成为一个危险的命令,可能导致工作目录中所有当前进度丢失!但本例中工作目录内的文件并不会被修改。 不加选项地调用 git reset
并不危险 它只会修改暂存区域。
9.撤销对文件的修改
$ git checkout -- README.md $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README
注意:git checkout -- [file]
是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。
命令的总结:
git init 初始化 git status 查看状态 git add 添加到缓存区 git commit 提交到版本库 git log 查看提交记录,当前位置往前的提交记录 git reflog 查看所有的提交记录 git reset HEAD 从缓存区把文件拉取到工作区 git reset --hard 回滚到某一个版本,可以写长的值,也可以写短的值 git diff 对比的是工作区跟缓存区之间的差别 git diff --cached 对比缓存区跟版本库之间的差别 git checkout -- filename 取消修改的内容 git stash 将当前开发的内容放在"某个地方" git stash pop 恢复当前的工作目录,并删除 git stash list 查看stash列表 git stash drop 删除stash git stash apply 恢复当前的工作目录,不删除stash
参考:https://blog.51cto.com/wangfeng7399/2352524
以上是关于git 的基础的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段