有15分钟,想学习Git吗?
Git让一部分人同时工作在相同的文档(通常是代码)下,却没有干扰到别人。这是一个分布式的版本控制系统。
初始化一个Git存储库
> git init
Initialized empty Git repository in /.git/
接下来,让我们输入git状态命令,看看我们的项目的当前状态是:
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
我创建了一个名为octocat.txt的文件。
你应该再次运行git status命令查看存储库状态已经改变了:
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# octocat.txt
nothing added to commit but untracked files present (use "git add" to track)
看来我们的Git存储库正常工作了,并且octocat.txt是一个新文件。
让Git开始更改octocat.txt,我们首先需要使用git add将其添加到暂存区域。
$ git add octocat.txt
很好!Git正在跟踪octocat.txt文件。让我们再次运行git status看到我们所在的地方。
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: octocat.txt
#
注意到Git怎样更改提交了吗?这里列出的文件暂存区域,而且他们还没有在我们的仓库。我们可以在保存他们到存储库之前,添加或删除文件。
为了保存修改,我们运行commit命令,提交我们的改变。
$ git commit -m "Add cute octocat story"
[master (root-commit) 20b5ccd] Add cute octocat story
1 file changed, 1 insertion(+)
create mode 100644 octocat.txt
很好!你还可以使用通配符,如果你想添加许多相同类型的文件。请注意,我已经加入了一个.txt的文件到你的目录下面。
我把一些在octofamily目录和其他一些放在我们octobox的根源。幸运的是,我们可以使用一个git add的通配符添加所有的新文件。不要忘记引号!
$ git add '*.txt'
好吧,你已经添加了所有的文本文件到暂存区域。随意运行git status,看看你要提交些什么。
如果它看起来不错,继续运行commit吧。
$ git commit -m 'Add all the octocat txt files'
[master 3852b4d] Add all the octocat txt files
4 files changed, 4 insertions(+)
create mode 100644 blue_octocat.txt
create mode 100644 octofamily/baby_octocat.txt
create mode 100644 octofamily/momma_octocat.txt
create mode 100644 red_octocat.txt
我们做了一些提交,现在让我们浏览一下我们的修改。
幸运的是,有git log命令。让Git的log作为日志,记录我们到目前为止所有提交的修改。
$ git log
commit 3852b4db1634463d0bb4d267edb7b3f9cd02ace1
Author: Try Git <try_git@github.com>
Date: Sat Oct 10 08:30:00 2020 -0500
Add all the octocat txt files
commit b652edfd888cd3d5e7fcb857d0dabc5a0fcb5e28
Author: Try Git <try_git@github.com>
Date: Sat Oct 10 08:30:00 2020 -0500
Added cute octocat story
很不错啊!我们继续向前走,用Try Git在https://github.com/try-git/try_git.git地址中,为你创建一个新的空GitHub库。我们需要添加一个远程存储库,在本地添加GitHub服务器。
这个命令需要一个远程库名称和库URL,即https://github.com/try-git/try_git.git。
继续运行git remote add命令。
$ git remote add origin https://github.com/try-git/try_git.git
push命令告诉Git,当我们准备好时提交到哪里。把我们本地更改放到我们的origin repo(GitHub)上。
我们的远程名称是origin,默认本地分支的名字是master。- u让Git记住参数,以便下次我们可以简单地运行Git push,Git将知道该怎么做。继续推动它!
$ git push -u origin master
Branch master set up to track remote branch master from origin.
让我们假设一段时间已经过去了。我们邀请别人到我们的github项目,做出他们自己的提交和推动。
我们可以检查GitHub库的更改并拉回任何新的变化。
$ git pull origin master
Updating 3852b4d..3e70b0f
Fast-forward
yellow_octocat.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 yellow_octocat.txt
差异
看起来有一些增加和变更在octocat family。让我们使用git diff命令来看看与上次提交有什么不同。
在这种情况下,我们希望我们最近提交的差异,我们可以参考使用HEAD指针。
$ git diff HEAD
diff --git a/octocat.txt b/octocat.txt
index 7d8d808..e725ef6 100644
--- a/octocat.txt
+++ b/octocat.txt
@@ -1 +1 @@
-A Tale of Two Octocats
+[mA Tale of Two Octocats and an Octodog
暂存差异
另一个很好的使用diff看着变化在文件已经暂存了。记住,暂存文件文件我们已经告诉git准备提交。
让我们使用git add 添加octofamily / octodog.txt,我只是为你添加到family。
$ git add octofamily/octodog.txt
阶段性差异
很好,现在继续运行git diff及--staged选项,看看刚才暂存的变化。你应该看到octodog.txt被创建。
$ git diff --staged
diff --git a/octofamily/octodog.txt b/octofamily/octodog.txt
new file mode 100644
index 0000000..cfbc74a
--- /dev/null
+++ b/octofamily/octodog.txt
@@ -0,0 +1 @@
+[mwoof
重置暂存
既然octodog是family的一部分,octocat就郁闷了。因为我们爱octocat胜过爱octodog,我们将通过消除octodog.txt使他高兴起来。
你可以使用git reset命令阻止暂存文件。继续删除octofamily / octodog.txt。
$ git reset octofamily/octodog.txt
撤销
git reset很好的阻止暂存 octodog.txt,但你会发现他还在那里。他只是不再暂存了。
可以使用命令:git checkout -- <target>,改变到文件最后提交状态。
$ git checkout -- octocat.txt
拓展
当开发人员正致力于一个特性或bug,他们会经常复制(即branch)他们的代码,可以使独立提交。然后他们可以合并分支到他们主要的master分支。
我们想要删除所有这些讨厌的octocats,所以让我们创建一个名为clean_up的分支,其中我们将完成所有的工作。
$ git branch clean_up
切换分支
太棒了!现在如果你键入git branch,你会看到两个本地分支机构:一个名为master的主要分支和你的新分支clean_up。
你可以使用git checkout<branch>命令切换分支,现在切换到clean_up分支。
太棒了!现在如果你键入git branch,你会看到两个本地分支机构:一个名为master的主要分支和你的新分支clean_up。
你可以使用git checkout<branch>命令切换分支,现在切换到clean_up分支。
$ git checkout clean_up
Switched to branch 'clean_up'
全部删除
好了,你在clean_up分支。你终于可以通过使用git rm命令删除所有那些讨厌的octocats,不仅会从磁盘删除实际的文件,而且也将为我们暂存删除的文件。
你要想再次使用通配符来扫除所有octocats,继续运行。
$ git rm '*.txt'
rm 'blue_octocat.txt'
rm 'octocat.txt'
rm 'octofamily/baby_octocat.txt'
rm 'octofamily/momma_octocat.txt'
rm 'red_octocat.txt'
提交修改的分支
现在您已经删除了所有cats,你需要提交您的更改。
随意运行git status,检查你将要提交的修改。
$ git commit -m "Remove all the cats"
[clean_up 63540fe] Remove all the cats
5 files changed, 5 deletions(-)
delete mode 100644 blue_octocat.txt
delete mode 100644 octocat.txt
delete mode 100644 octofamily/baby_octocat.txt
delete mode 100644 octofamily/momma_octocat.txt
delete mode 100644 red_octocat.txt
切换到master
太好了,你几乎完成了cat。修复bug,你只需要切换回master分支,这样你就可以从clean_up分支copy(或merger)你的更改,返回到master分支。
继续checkout master分支。
$ git checkout master
Switched to branch 'master'
准备合并
很好,现在你不得不将你的更改从clean_up分支合并到master分支。深吸一口气,这没那么可怕。
我们已经在master分支上了,所以我们只需要告诉Git,将clean_up分支合并到它上面。
$ git merge clean_up
Updating 3852b4d..ec6888b
Fast-forward
blue_octocat.txt | 1 -
octocat.txt | 1 -
octofamily/baby_octocat.txt | 1 -
octofamily/momma_octocat.txt | 1 -
red_octocat.txt | 1 -
5 files changed, 5 deletions(-)
delete mode 100644 blue_octocat.txt
delete mode 100644 octocat.txt
delete mode 100644 octofamily/baby_octocat.txt
delete mode 100644 octofamily/momma_octocat.txt
delete mode 100644 red_octocat.txt
继续清理事物
恭喜恭喜!你刚刚完成你的第一个成功的bugfix和merge。剩下的要做的就是把你自己收拾利索。既然你完成了clean_up分支,你就不需要它了。
你可以使用 git branch -d <branch name>来删除一个分支。现在继续删除clean_up分支。
$ git branch -d clean_up
Deleted branch clean_up (was ec6888b).
最后的push
我们到最后一步了。我很高兴你做到这一步,而且很好地学习了Git。接下来你做的就是,将所有你做的工作push到你的远程存储库。
$ git push
To https://github.com/try-git/try_git.git
3e70b0f..9df3f64 master -> master
最后一击
太棒了!你现在小小地品味到Git的伟大。您可以看一下包裹页面Git和GitHub的一点信息,哦,当然还有你的徽章!
欢迎转载,注明来源,如有侵权,及时联系