Git 基本使用

git 是一个分布式管理系统。并不是要把仓库提交到远程仓库之后才能进行git 操作。git 是可以不依赖于互联网的。一个本地的没有联网的电脑,没有远程仓库,照样可以使用git 来建立提交记录,和回退版本。

以下的大部分操作都是在未联网的状态在本地进行操作的。

repository 仓库

你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

  1. 创建一个文件夹(假设叫做A),cd 到改文件夹目录下。
  2. git init命令把这个目录变成Git可以管理的仓库。然后该目录下就多了一个 .git文件夹。这个目录是Git用来跟踪管理版本库的,千万不要随便修改。
  3. 创建一个文件 readme.txt 到 A 文件夹。但是此时Git并没有自动管理这个文件(虽然文件是在A文件夹内),你得明确告诉他。使用git add readme.txt命令告诉Git,readme.txt是我将要提交的文件。
  4. git commit命令告诉git ,我要把该文件提交到仓库,也就是要把这个文件添加到Git管理范畴内。(在.git文件夹内记录该文件。)执行后打印信息如下:
    1
    2
    3
    [master (root-commit) eaadf4e] wrote a readme file
    1 file changed, 2 insertions(+)
    create mode 100644 readme.txt

问:git addgit commit为什么不统一成一个命令?
因为假设你改了很多文件,但是你并不想提交所有文件。为了更细粒区分提交内容,你只想提交其中的一部分。那么,你只需要多次 git add xxx 添加你想要提交的文件。最后再一次性commit。

  1. git status可以让我随时掌握git仓库当前的状态:
    1
    2
    3
    4
    5
    6
    7
    8
    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")

告诉你:
我在哪个分支
哪些文件被改动了
是否add 过了 (is staged )
是否commit 过了 (is commited)
可以使用git checkout -- readme.txt来丢弃你刚才未提交的改动

  1. git diff 可以查看被改动的文件到底改了哪些内容。也就是查看细节。
  2. git add readme.txt之后,输入git status,可以看到如下提示:
    1
    2
    3
    4
    5
    On branch master
    Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)

    modified: readme.txt

这个信息告诉我们:可以使用 git reset HEAD readme.txt使该文件至于未add 的状态

  1. 执行 git commit -m "add distributed"

    1
    1 file changed, 1 insertion(+), 1 deletion(-)
  2. git log命令用于从最近到最远显示我们的提交日志。但是只会显示提交时输入的提交信息,作者和日期。git log --pretty-oneline可以简短显示提交记录。

  3. 版本回退:
    在Git中,用HEAD表示当前版本,HEAD^表示上一个版本。HEAD^^表示上上个版本。HEAD-100表示前100个版本。
    git reset。。。git reset --hard HEAD^
    注意:这个reset不仅可以回到过去版本,还可以回到未来版本。执行git reset –hard HEAD^之后,你会回到过去版本。此时git log已经不显示你最新的阿哥版本了,如果此时还想还原的话,执行git reset --hard e57ee7,其中的e57ee7是之前最新版本的版本号的前几位。

    也就是说,reset并没有丢弃之前的记录,而是仅仅把指针指向了前一个版本。
    如下图:


上述情况是知道commit id,如果不记得了怎么办。

  1. git reflog可以查看git记录的你的每一次输入过的命令。

其他知识点

  1. ~/Desktop 中的~表示用户目录。比如 ~/Download到下载目录。
  2. ./dir1 中的.表示的是当前目录。

    1
    2
    3
    4
    // 1. 先到下载目录
    cd ~/Download
    // 2. 再到下载目录中的dir1文件夹
    cd ./dir1
  3. 创建文件夹 mkdir

    1
    mkdir dir2
  4. 创建文件 touch

    1
    touch file.txt

####码云提供的: