Git基本操作(详,小白专用)
文章目录
Git基本常用命令
- mkdir 创建文件夹
- touch 创建文件
- ls 查看当前目录下文件/文件夹(不包含隐藏)
- ls -a 查看目录下所有文件/文件夹(包含隐藏)
- rm <filename> 移除文件
- rm -r * 删除整个目录中的所有子目录和文件
- vim <filename> 编辑文件
- cd <foldername> 进入文件夹
- cd .. 返回上一级文件夹
Git基本配置
- git config可以配置git的参数,可以使用
git config --list
查看已经配置的git参数。 - 其中有三个级别的保存位置:
--system
所有用户(本系统)--global
当前用户(全局)--local
本地配置(当前目录),默认
配置用户名及邮箱
- 在使用Git提交前,必须配置用户名和邮箱,这些信息会永久保存到历史记录中。
git config --global user.name "Test"
git config --global user.email Test@test.com
设置Git默认使用的文本编辑器
- 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::
git config --global core.editor emacs
设置差异分析工具
- 在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
git config --global merge.tool vimdiff
- Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息
Git版本信息
- 查看自带的版本
git --version
- 移除原来的版本
yum remove git
Git创建仓库
- Git 使用 git init 命令来初始化一个 Git 仓库
- 在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录
- 例:
git init
- 该命令执行完后会在当前目录生成一个 .git 目录。
- 也可以自己指定生成的仓库目录:
git init newname
- 该命令执行完后会在当前目录生成一个名为 newname 的文件夹,并把这个文件夹作为仓库,该文件下包含一个 .git 的文件夹
Git拷贝仓库
- 我们使用 git clone 从现有 Git 仓库中拷贝项目克隆仓库的命令格式为:
git clone <repo> <directory>
- 参数说明:
- repo:Git 仓库。
- directory:本地目录。
- 例:
git clone https://github.com/Ebookchain/ebookchain.org.git ebookchain
- 代表从 https://github.com/Ebookchain/ebookchain.org.git 仓库,拷贝到本地目录 ebookchain下,如果不指定directory,则默认为 ebookchain.org,即仓库中项目名。
- 注:需联网
- git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。各种写法如下:
- git clone git@github.com:fsliurujie/test.git --SSH协议
- git clone git://github.com/fsliurujie/test.git --GIT协议
- git clone https://github.com/fsliurujie/test.git --HTTPS协议
Git 基本快照
git add
- touch命令可将该文件添加到缓存,如我们添加以下两个文件:
$ touch README
$ touch hello.php
$ ls
README hello.php
$ git status -s
?? README
?? hello.php
- git status 命令用于查看项目的当前状态
git status
- 查看在你上次提交之后是否有修改
git status -s
- 获得简短的结果输出。如果没加该参数会详细输出内容
- 接下来我们执行 git add 命令来添加文件:
$ git add README hello.php
- 现在我们再执行 git status,就可以看到这两个文件已经加上去了。
$ git status -s
A README
A hello.php
-
新项目中,添加所有文件很普遍,我们可以使用通配符来批量添加文件
git add .
- 添加当前项目的所有文件
git add *.txt
- 添加后缀为 .txt的所有文件
-
现在我们修改 README 文件:
$ vim README
- 在 README 添加以下内容:
- # Demo Git 测试
- 然后保存退出。
-
再执行一下 git status:
$ git status -s
AM README
A hello.php
- “AM” 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。
- 改动后我们再执行 git add 命令将其添加到缓存中:
$ git add .
$ git status -s
A README
A hello.php
当你要将你的修改包含在即将提交的快照里的时候,需要执行 git add。
git diff
- 执行 git diff 来查看执行 git status 的结果的详细信息。
- git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。
- git diff 有两个主要的应用场景。
- 尚未缓存的改动:
git diff
- 查看已缓存的改动:
git diff --cached
- 查看已缓存的与未缓存的所有改动:
git diff HEAD
- 显示摘要而非整个 diff:
git diff --stat
示例
在 hello.php 文件中输入以下内容:
<?php
echo 'demo例子:www.demo.com';
?>
$ git status -s
A README
AM hello.php
$ git diff
diff --git a/hello.php b/hello.php
index e69de29..69b5711 100644
--- a/hello.php
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo 'demo例子:www.demo.com';
+?>
- git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。
- 接下来我们来查看下
git diff --cached
的执行效果:
$ git add hello.php
$ git status -s
A README
A hello.php
$ git diff --cached
diff --git a/README b/README
new file mode 100644
index 0000000..8f87495
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+# Runoob Git 测试
diff --git a/hello.php b/hello.php
new file mode 100644
index 0000000..69b5711
--- /dev/null
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo 'demo例子:www.demo.com';
+?>
git commit
- 使用 git add 命令将想要快照的内容写入缓存区。
- 而执行 git commit 将缓存区内容添加到仓库中。
- Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址。
$ git config --global user.name 'test'
$ git config --global user.email test@test.com
- 接下来我们写入缓存,并提交对 hello.php 的所有改动。在首个例子中,我们使用 -m 选项以在命令行中提供提交注释。
$ git add hello.php
$ git status -s
A README
A hello.php
$ git commit -m '第一次版本提交'
[master (root-commit) d32cf1f] 第一次版本提交
2 files changed, 4 insertions(+)
create mode 100644 README
create mode 100644 hello.php
- 现在我们已经记录了快照。如果我们再执行 git status:
$ git status
# On branch master
nothing to commit (working directory clean)
- 以上输出说明我们在最近一次提交之后,没有做任何改动
- 如果你没有设置 -m 选项
- Git会默认打开vim 让你添加信息,如果不添加是无法提交的
如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:
git commit -a
- 我们先修改 hello.php 文件为以下内容:
<?php
echo 'demo例子:www.demo.com';
echo 'demo例子:www.demo.com';
?>
- 再执行以下命令:
git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
1 file changed, 1 insertion(+)
git reset HEAD
- git reset HEAD 命令用于取消已缓存的内容。
我们先改动文件 README 文件,内容如下:
# demo Git 测试
# demo例子
- hello.php 文件修改为:
<?php
echo 'demo例子:www.demo.com';
echo 'demo例子:www.demo.com';
echo 'demo例子:www.demo.com';
?>
现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:
$ git status -s
M README
M hello.php
$ git add .
$ git status -s
M README
M hello.pp
$ git reset HEAD hello.php
Unstaged changes after reset:
M hello.php
$ git status -s
M README
M hello.php
- 现在执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。
$ git commit -m '修改'
[master f50cfda] 修改
1 file changed, 1 insertion(+)
$ git status -s
M hello.php
- 可以看到 hello.php 文件的修改并未提交。
- 这时我们可以使用以下命令将 hello.php 的修改提交:
$ git commit -am '修改 hello.php 文件'
[master 760f74d] 修改 hello.php 文件
1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。
git rm
- 如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
- 要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作
git rm <file>
- 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
- 如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可
git rm --cached <file>
如我们删除 hello.php文件:
$ git rm hello.php
rm 'hello.php'
$ ls
README
不从工作区中删除文件:
$ git rm --cached README
rm 'README'
$ ls
README
- 可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
git rm –r *
- 进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。
Git标签
- 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本
- 每提交(commit)一次,即可打一次标签,方便管理和查询信息
- 创建标签
git tag v1.0
- 查看已有标签
git tag
- 删除标签
git tag -d v1.1
- 查看此版本所修改的内容
git tag show v1.0
- 创建一个带注解的标签
git tag -a v1.1
此方法会自动打开vim,让你编辑注解信息git tag -a v1.2 -m "demo.com标签"
- 查看提交历史时显示标签
- 只需加上
git log --decorate
即可 - 例:
git log --oneline --decorate --graph
- 只需加上
- 给之前提交的版本追加标签
- 通过
git long --oneline
找到版本号 git tag -a v0.9 85fc7e7 -m '之前的版本'
- 通过
Git查看提交历史
- 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。
git log
查看历史记录git log --oneline
查看历史记录的简洁的版本- 用 --graph 选项,查看历史中什么时候出现了分支、合并
git log --oneline --graph
- 可以更清楚明了地看到何时工作分叉、又何时归并。
- 用 '–reverse’参数来逆向显示所有日志
git log --reverse --oneline
- 如果只想查找指定用户的提交日志可以使用命令:
git log --author
, 例如,要找 Git 源码中 Linus 提交的部分:git log --author=Linus --oneline -5
- 代表 查找用户名为 Linus 的简洁版的前5条历史记录
- 如果要指定日期,可以执行几个选项:–since(之后) 和 --after,也可以用 --until(之前) 和 --before 。
- 例如:
git log --oneline --after={2019-05-07/09:00}
- 2019.5.7日 9点之后的所有提交
git log --oneline --before={3.weeks.ago}
- 三周前的所有提交
git log --oneline --before={2019-05-07/12:00} --after={2019-05-07/09:00}
- 2019.5.7日 9点之后并且在12点之前的所有提交
- 多个条件用 且 表示