上篇: Github 怎么用(一)
本文
安装
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
Linux:
Ubantu:sudo apt-get install git
Centos: yum install 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.txt
和 git 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
命令,当作什么都没发生 = .=