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命令操作一个完整流程

使用 Git 来管理 Xcode 中的代码片段

如何管理在每个 git 版本中添加私有代码片段?

markdown Git代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段