Git 命令实战入门 ,奶妈级教学

327 阅读11分钟

我不会用官方的语言告诉你Git 是什么,对此我表示深深得歉意~~ 在我看来像CSDN、博客园、掘金等博客交流平台就是小的“GitHub”,只不过在这里更多的是一些零零散散的笔记或者文章,其实Gihub也是一样的“交流(友)社区",这里有一本正经的开源项目,你可以在上面学习别人的开源项目也可以上传属于自己的作品,也有各种沙雕的个人“作品”,比如 The F**k、比如:P站logo生成器,以及各种奇葩的交友方式 /滑稽。咳咳,总的来说呢,Github 是一个供大家“学习”的平台,同时也是一个学习交流社区,就酱。我只想带你入坑,至于你学的怎么样,我包不负责 /抠鼻

Emmm.......

阅读说明:

总文加起来 20分钟可以看完,我把总文分成了 Git命令实战 和 GitHub 运用 两部分,本篇是 Git 命令实战,各位不用担心~常用的Git命令两只手就可以数过来,无非就是提交和下载,好了那么我们开始进入入坑 学习吧。

简单的安装

Git的安装非常精简,基本一步到位: Windows点进去选择Window,它会自动安装好 MacOS方法一:推荐直接下载Xcode,直接在App Store搜索(免费)xcode是苹果的集成开发环境(IDE)下载好这个软件不仅Git很多环境都给你自动配置好了 方法二:通过第三方homebrew安装(不推荐): 在Mac终端输入

# 安装 homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装Git
brew install git

LinuxUbantusudo apt-get install git Centosyum install git

Emm。。。。git的安装基本不会出意外,出了意外你顺着网线来打我 接下来就开始动手实操了,让我们先创建一个文件夹吧,不妨就叫Git,作为练习的主要目录,好了就开始吧

初始化一个Git仓库

创建一个 Git 目录,我们把这个目录变为可以用GIT管理的仓库! git init命令把这个目录变成Git可以管理的仓库

mkidr Git cd Git git init

创建练习对象

然后就可以在仓库愉快的玩耍了,我们先搞一个txt文件练习一下

vim demo.txt

这条命令会 创建 并且 进入 demo.txt, 按下 i 进入 vim编辑模式,就可以在这个文件里输入内容了! 我们输入:

this is 1 test ~ ~ ~ ~ ~

然后 按下esc退出vim编辑模式, 然后按下(冒号) : 并在冒号后面输入 wq 然后回车,我们就自动关闭并且保存这个txt文件了. 随后我们用 git add 命令把 txt 文件放到仓库里,随后用git commoit命令 把文件提交给仓库,

git add demo.txt git commit -m "first commit"

返回:

[master c819da4] first commit 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 demo.txt

你可以这样理解, 就像寄快递一样, 我们把快递交给快递小哥(add),随后快递小哥把快递送到达物流仓库(commit)-m "first commit" 是提交说明,-m 是固定格式,引号里面是自定义内容,就好像你邮寄快递的留言一样,可以对本次“邮寄”做一个说明.

第二次修改

然后我们对 demo.txt 修改添加一些内容,输入 vim demo.txt 我们会进入demo.txt文件,然后按下 i 键,进入vim 编辑模式,我们写入:

this is first test 这是第二次修改

写完后,按下 esc 键退出vim编辑模式,进入vim命令模式, 然后输入(冒号) :wq 回车,这样就写入并且退出了。 其实,我们每一次的修改git它都有记录,我们输入 git diff demo.txt 命令可以查看,这个文件发生了哪些不同. diff 是different的意思

[root@StrawberryJam Git]# git diff demo.txt diff --git a/demo.txt b/demo.txt index 2fd7f63..a9b2fb1 100644 --- a/demo.txt +++ b/demo.txt @@ -1,2 +1,2 @@ this is first test

+这是第二次修改

我们输入 git status 查看git仓库的状态,看看有哪些是要给“快递小哥”,有哪些将要送往“物流中心”的

[root@StrawberryJam Git]# git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add ..." 更新要提交的内容) (使用 "git checkout -- ..." 丢弃工作区的改动) 修改: demo.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

上面提示告诉我们, demo.txt 已经修改过了,我们还没有提交给仓库,接下来我们进行第二次提交,也就是我们修改过后的又一次提交,输入 git add demo.txt 命令, 然后输入 git commit -m "second commit"

[root@StrawberryJam Git]# git add demo.txt [root@StrawberryJam Git]# git commit -m "second commit" [master 2f14c19] second commit 1 file changed, 1 insertion(+), 1 deletion(-)

我们就完成第二次修改的(发送)提交了, 是不是很简单!!,我们再输入git status 看一看

[root@StrawberryJam Git]# git status 位于分支 master 无文件要提交,干净的工作区

到这里,我们已经学会了 如何初始化一个GIT仓库和对文件的修改及提交。我们知道Git是一个版本控制系统,既然我们对文件修改了,那么就一定还可以回到上次的版本,这就好比文件备份,接下来让我们尝试一下回到“备份”的文件

第三次修改

输入 vim demo.txt 命令进入文件,按 i 键 进入 vim 编辑模式,输入新的内容

this is first test 这是第二次修改 这是第三次修改 ~ ~ ~ ~

按下 esc 退出编辑模式 输入 :wq 回车后保存并且退出。 输入 cat demo.txt 命令查看一下文件是否有我们修改的内容

[root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改

没有问题后我们就可以把第三次修改的文件进行提交了!再次输入 git add demo.txtgit commit -m "thirt commit"

git add demo.txt [root@StrawberryJam Git]# git commit -m "third commit" [master 3b15c27] third commit 1 file changed, 1 insertion(+)

回到“备份”!!

到这里我们一共对文件进行了三次修改,接下来让我回到第二次修改的文件试试,输入 git reset --hard HEAD^ , git reset --hard 是固定格式记住就好了,HEAD^ 是回到上一个版本,HEAD^^就是上上个版本

[root@StrawberryJam Git]# git reset --hard HEAD^ HEAD 现在位于 2f14c19 second commit

提示表明,我们在第二次修改的文件版本了,不妨输入cat demo.txt 预览一下

[root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改

果然,我们退回到了第二次修改后的版本文件,如果我们又后悔了怎么办,不用担心依然可以回到第三次修改的版本文件,首先我们输入 git reflog可以查看git命令操作日志

[root@StrawberryJam Git]# git reflog 2f14c19 HEAD@{0}: reset: moving to HEAD^ 3b15c27 HEAD@{1}: commit: third commit 2f14c19 HEAD@{2}: commit: second commit c819da4 HEAD@{3}: commit: first commit

最前面的 2f14c19 是我们操作对应的ID ,(ID都是随机分配的) 我们可以看到 第三次提交的 ID是 3b15c27,那么我就可以输入 git reset --hard 3b15c27 回到第三次提交的版本文件

[root@StrawberryJam Git]# git reset --hard 3b15c27 HEAD 现在位于 3b15c27 third commit [root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改

就这样我们又再次回到了第三次版本是不是很简单,看来想要回到指定版本只需要通过 git reflog 查看操作ID,然后 git reset --hard 就可以回到“备份”版本文件了!这个HEAD是一个箭头指针, 每当我们git reset--hard ID 就代表HEAD指向了这个ID,那么我们当前的版本就是这个HEAD指向的版本。

修改的管理~

多次修改一次提交

现在我们知道了 commit 是在 add 之后,如果对文件修改一次后,我们git add 把“邮件”(文件)交给快递小哥,此时我们又修改了一次文件,如果这时候使用git commit 命令,那么Git只会记录我们第一次修改的文件,也就是说我们通过git add 把第一次修改后的文件交给快递小哥后,他就离开了准备发往物流中心,所以此时使用git commit 命令只会记录第一次修改的文件。一句话总结来说:每次修改都需要 git add一下,最后统一git commit 一起提交文件。

撤销修改:

接下来我们学习修改的撤销,我们先看一下git的 status

[root@StrawberryJam Git]# git status
位于分支 master 无文件要提交,干净的工作区

好了我们对demo.txt 进行第四次内容的添加,vim demo.txt 后文件的内容

[root@StrawberryJam Git]# vim demo.txt [root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改 这是第四次添加内容

我们在看一下git 的 status

[root@StrawberryJam Git]# git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add ..." 更新要提交的内容) (使用 "git checkout -- ..." 丢弃工作区的改动) 修改: demo.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

我们可以看到 使用 “git checkout -- ..." 丢弃工作区的改动 这个提示,那我们不妨试一试输入 git checkout demo.txt,然后再cat 一下文件

[root@StrawberryJam Git]# git checkout demo.txt [root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改

果然撤销了 我们的第四次添加的内容 ,我们再看看git 的status

[root@StrawberryJam Git]# git status 位于分支 master 无文件要提交,干净的工作区

到这里并没有什么大问题,因为我们修改文件后并没有对文件进行add、 commit 等操作,那么如果我们是在git add 之后想要撤销怎么办呢,我们重新写入 “这是第四次添加的内容”,并且执行了 git add demo.txt 命令

[root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改 “这是第四次添加的内容” [root@StrawberryJam Git]# git add demo.txt

就在add 之后,我后悔了,我不想提交我想撤销怎么办,git status 告诉了我们答案

[root@StrawberryJam Git]# git status 位于分支 master 要提交的变更: (使用 "git reset HEAD ..." 撤出暂存区) 修改: demo.txt [root@StrawberryJam Git]#

提示已经很明确了, 使用 "git reset HEAD ..." 撤出暂存区 那我们不妨试一试

[root@StrawberryJam Git]# git reset HEAD demo.txt 重置后撤出暂存区的变更: M demo.txt

注意!!这样我们的 demo.txt 文件只是回到了 git add 之前的状态,并没有对文件内容做出撤回处理,先通过 cat 看一下文件再status一下文件状态

[root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改 “这是第四次添加的内容”

[root@StrawberryJam Git]# git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add ..." 更新要提交的内容) (使用 "git checkout -- ..." 丢弃工作区的改动) 修改: demo.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

此时我们就可以再次使用 git checkout demo.txt 对文件内容作出撤回处理了

[root@StrawberryJam Git]# git checkout demo.txt [root@StrawberryJam Git]# cat demo.txt this is first test 这是第二次修改 这是第三次修改 [root@StrawberryJam Git]# git status 位于分支 master 无文件要提交,干净的工作区

Ok ~~ 那么如果我又add 了 又 commit了肿么办,那就直接 回到“备份” 参考上一节喽~

文件的删除

新建一个test.txt 文件并且写入内容,vim test.txt 创建并且打开 文件,写入

这是一个即将被Kill掉的文件 ~ ~ ~ ~

随后 git add 并且 commit 该文件

[root@StrawberryJam Git]# git add test.txt [root@StrawberryJam Git]# git commit -m "bye bye" [master c2f3cdf] bye bye 1 file changed, 1 insertion(+) create mode 100644 test.txt

然后我们的删除命令 rm test.txt, 系统会问我们要不要删除文件,回复 y 好了

[root@StrawberryJam Git]# rm test.txt rm:是否删除普通文件 "test.txt"?y

但是这里,删除的只是我们工作区的文件,也就是说 GIT 还有我们的备份的,只是我们当前的版本看不到了而已,那我们如何把这个“备份”也给Kill掉呢,git status 给出了答案

[root@StrawberryJam Git]# git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add/rm ..." 更新要提交的内容) (使用 "git checkout -- ..." 丢弃工作区的改动) 删除: test.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

告诉我们可以 使用 "git add/rm ..." 更新要提交的内容 那我们不妨用 rm 把test.txt从“备份”列表里删除,然后 commit 提交上去重新“备份”确认删除了

[root@StrawberryJam Git]# git rm test.txt rm 'test.txt' [root@StrawberryJam Git]# git commit -m "It is gone" [master 815d827] It is gone 1 file changed, 1 deletion(-) delete mode 100644 test.txt

如果是一不下心删除错了文件怎么办呢? 上面的git status 还有另一个选项 使用 "git checkout -- ..." 丢弃工作区的改动 这样你就可以撤销你的rm 命令,当作什么都没发生 = .= 欢迎访问我的博客网站:wangwanghub.com