今天我们要说的Git的命令操作是基于本地Git仓库来进行,那么,到底什么是Git仓库呢?
Git仓库可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的新增、修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建一个Git仓库有以下两种常用方式:
通过$ git init命令将当前目录初始化为Git仓库 在需要创建Git仓库的文件夹目录中,右键点击 Git Base Here,在命令窗口中输入以下命令: $ git init Initialized empty Git repository in D:/workspace/git workspace/HelloGit/.git/该命令会在当前目录下创建一个名为 .git 的子目录(隐藏目录),这个子目录含有你初始化的Git仓库中所有的必须文件,就是Git的版本库。 如果你是在一个已经存在文件的文件夹(而不是空文件夹)中初始化Git仓库的话,文件并不会被跟踪,通过git add 命令来实现对指定文件的跟踪,然后执行git commit提交。
从一个远程服务器中克隆一个现有的 Git 仓库: git clone https://github.com/test/test该命令会在当前目录下创建一个名为“test”的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 进入到这个新建的“test”文件夹,会发现远程服务器中所有的项目文件都已经在里面了,并且都被git管理起来了,直接使用即可,无需执行add和commit命令。 如果想在克隆Git仓库的时候,自定义一个文件夹名称,可在命令后添加自定义文件夹名即可:
$ git clone https://github.com/test/test myTest我们现在当前目录下新建一个 hellogit.txt 文件,然后使用 git status 命令查看当前Git仓库的文件状态:
$ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) hellogit.txt nothing added to commit but untracked files present (use "git add" to track)例如,通过上面的命令可以看见,当前是处于Git的master分支,并且当前有一个 hellogit.txt 文件处于未跟踪状态。
使用命令 git add 开始跟踪 hellogit.txt 文件,即把 hellogit.txt 文件加入到git版本库的暂存区,将此文件变为已跟踪
$ git add hellogit.txt $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: hellogit.txt执行以上命令,我们发现 hellogit.txt 已经从未跟踪状态变成了已改变待提交状态,这就说明 hellogit.txt 已经被git版本库跟踪。
此时我们编辑 hellogit.txt 文件,加入一行内容,再执行 git status 命令,看看会发生什么:
$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: hellogit.txt 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: hellogit.txt现在 hellogit.txt 文件同时出现在待提交(暂存区)和未提交更改的更改:(非暂存区),这怎么理解呢? 实际上 Git 只不过暂存了你运行 git add 命令时的版本,如果你现在提交,那么提交的版本是你最后一次运行 git add 命令时的那个版本。所以,运行了 git add 之后又修改了文件,需要重新运行 git add 把最新版本重新暂存起来。
$ git add hellogit.txt $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: hellogit.txt重新执行一次 git add 命令后,此时又变成了待提交状态。
使用 git diff 命令,可以查看已暂存和未暂存的文件有什么修改:
$ git diff diff --git a/hellogit.txt b/hellogit.txt index 37bd1a0..899dd80 100644 --- a/hellogit.txt +++ b/hellogit.txt @@ -1,2 +1,3 @@ hello git -hello git2 \ No newline at end of file +hello git2 +test diff \ No newline at end of file通过对比可以发现,hellogit.txt 文件中增加了 test diff 这一行字符
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容。
使用命令 git commit 可以把把暂存区的文件提交到git版本库; -m 后面输入的是本次提交的说明,可以输入任意内容,最好是有意义的,这样你就能从历史记录里方便地找到改动记录;
需要注意的是, git commit 只会提交当前已经执行过 git add 命令的相关改动到git版本库,所以,在执行 git commit 之前最好使用 git status 命令查看当前的文件状态,以确定是不是所有文件都已经提交到了暂存区。
前面我们所有的命令中,在执行 git commit 之前,必须要先执行 git add 命令,将文件提交到暂存区,通过git commit –a –m “xxx” 命令,我们可以跳过 git add 命令,直接将文件提交到git版本库
首先我们编辑一下 hellogit.txt 文件,然后执行 git status 查看一下文件状态:
$ 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: hellogit.txt接下来我们不执行 git add 命令,直接执行 git commit -a -m ‘test commit’:
$ git commit -a -m 'test commit' [master 75b2414] test commit 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 testcommit.txt可以发现,使用这个命令的时候,哪怕不执行 git add 也是可以提交到git版本库的;
需要注意的是:git commit -a -m ‘test commit’ 命令只会把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤,但是对于没有被git跟踪过的文件,是不会被提交的,需要执行一次 git add 命令被git跟踪之后才可以使用这个命令直接提交。
感谢您的阅读,本文为作者归纳总结笔记,可能存在不当之处; 附上原文博客链接:Git的基本命令