上篇: 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
Ubantusudo apt-get install git
Centosyum 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.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 命令,当作什么都没发生 = .=

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐