这里默认已经安装好 Git ,并注册了 GitHub 帐号,如尚存疑惑,请查看:《Ubuntu:初识GitHub和Git》https://blog.csdn.net/qq_41297934/article/details/103263531。
一、创建新仓库
本地文件通过 Git 上传到 GitHub 上,需在本地创建新仓库。
1. 创建项目文件夹 Prodect ,该文件包含两个文件 first.py 和 README.md :
cfl@Ambitioner:~/Project$ ls -a
. .. first.py README.md
2. 在已创建的项目文件夹 Project 下,使用终端创建新的 git 仓库:
$ git init
cfl@Ambitioner:~/Project$ git init
已初始化空的 Git 仓库于 /home/cfl/Project/.git/
cfl@Ambitioner:~/Project$ ls -a
. .. first.py .git README.md
二、检出仓库
从本地仓库或者远程服务器仓库克隆一个新的仓库。
1. 从本地仓库克隆:(path 为原仓库所在位置)
$ git clone path
cfl@Ambitioner:~/PycharmProjects$ git clone /home/cfl/Project
正克隆到 'Project'...
完成。
2. 从远程服务器克隆:(username 为GitHub 用户名,repository 为仓库名)
$ git clone https://github.com/username/repository
cfl@Ambitioner:~/Project$ git clone https://github.com/Ambitioner-c/airbnb
正克隆到 'airbnb'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 51 (delta 18), reused 47 (delta 15), pack-reused 0
展开对象中: 100% (51/51), 完成.
三、工作流
你的本地仓库由 git 维护的三棵“树”组成。第一个是你的工作目录
,它持有实际文件;第二个是缓存区(Index)
,它像个缓存区域,临时保存你的改动;最后是 HEAD
,指向你最近一次提交后的结果。
四、添加与提交
步骤1. 第一步是将修改的部分添加到缓存区:
$ git add /*
cfl@Ambitioner:~/Project$ git add *
或者,添加指定文件
cfl@Ambitioner:~/Project$ git add first.py
步骤2. 实际提交改动到 HEAD :( message 为代码提交的信息)
$ git commit -m 'message'
cfl@Ambitioner:~/Project$ git commit -m 'First commit.'
[master (根提交) eeaa909] First commit.
2 files changed, 2 insertions(+)
create mode 100644 README.md
create mode 100644 first.py
步骤3. 修改已经提交到 HEAD ,但未提交到远程服务器仓库,下一节将讲述如何提交远程服务器。
五、推送改动
将 HEAD 中的修改提交到远程服务器仓库。
1. 已经克隆现有仓库,把本地仓库推送至远端仓库:
$ git push https://github.com/Ambitioner-c/Project.git master
2. 没有克隆现有仓库,把本地仓库推送至远端仓库:
$ git remote add origin https://github.com/Ambitioner-c/Project.git
$ git push -u origin master
cfl@Ambitioner:~/Project$ git remote add origin https://github.com/Ambitioner-c/Project.git
cfl@Ambitioner:~/Project$ git push -u origin master
Username for 'https://github.com': Ambitioner-c
Password for 'https://Ambitioner-c@github.com':
对象计数中: 4, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (4/4), 301 bytes | 150.00 KiB/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/Ambitioner-c/Project.git
* [new branch] master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
六、分支
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”。在其他分支上进行开发,完成后再将它们合并到主分支上。
1. 创建一个新的分支 feature:
$ git checkout -b feature
cfl@Ambitioner:~/Project$ git checkout -b feature
切换到一个新分支 'feature'
2. 选择进入的分支/主分支:
$ git checkout feature/master
cfl@Ambitioner:~/Project$ git checkout master
切换到分支 'master'
3. 删掉分支:
$ git brance -d feature
cfl@Ambitioner:~/Project$ git branch -d feature
已删除分支 feature(曾为 eeaa909)。
4. 将分支推送到远端仓库
注:本地创建的分支只有推送到远端仓库才可以开源。
$ git push https://github.com/Ambitioner-c/Project.git feature
cfl@Ambitioner:~/Project$ git push https://github.com/Ambitioner-c/Project.git feature
Username for 'https://github.com': Ambitioner-c
Password for 'https://Ambitioner-c@github.com':
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'feature' on GitHub by visiting:
remote: https://github.com/Ambitioner-c/Project/pull/new/feature
remote:
To https://github.com/Ambitioner-c/Project.git
* [new branch] feature -> feature
七、更新与合并
为了演示,我们在 feature 分支中修改 README.ed 文件结果如下:
cfl@Ambitioner:~/Project$ git add README.md
cfl@Ambitioner:~/Project$ git commit -m 'First commit.'
[master 63a390d] First commit.
1 file changed, 2 insertions(+)
cfl@Ambitioner:~/Project$ git push https://github.com/Ambitioner-c/Project.git feature
Username for 'https://github.com': Ambitioner-c
Password for 'https://Ambitioner-c@github.com':
Everything up-to-date
1. 更新本地仓库至最新版本:
$ git pull
cfl@Ambitioner:~/Project$ git pull
来自 https://github.com/Ambitioner-c/Project
* [新分支] feature -> origin/feature
已经是最新的。
2. 查看修改的部分
$ git diff master feature
cfl@Ambitioner:~/Project$ git diff master feature
diff --git a/README.md b/README.md
index 6d45873..a03bcaf 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1 @@
This is first project.
-
-First commit.
3. 合并其他分支到当前分支(主分支 master ):
$ git checkout master
$ git merge feature
cfl@Ambitioner:~/Project$ git checkout master
已经位于 'master'
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
cfl@Ambitioner:~/Project$ git merge feature
已经是最新的。
更多信息请查看官方文档:https://git-scm.com/book/zh/v2;简易指南:https://www.bootcss.com/p/git-guide/