Git and Github - Part II

Github

上节课中,我们简单的学习了一下 Git 的版本控制,但那一切都是在 local repo 上进行的。本节,我们将会引入远程仓库(remote repo),便于在不同机器上共享代码,同步更新,让项目具有更好的备份功能。

首先,你需要拥有一个 Github 账户。然后在你的 Github 上新建一个 repo,便于管理,你可以起一个和本地 repo 一样的名字。创建好后,Github 一般会提供一些命令供你在本地初始化并推送到远程仓库的命令行命令,你只需要将当前文件路径换成本地仓库的文件路径然后使用 Github 提供的命令创建远程-本地的仓库连接就可以了。

congzhi@ ~ git remote add origin https://github.com/UserName/Repo.git
git branch -M main
git push -u origin main
Enumerating objects: 28, done.
Counting objects: 100% (28/28), done.
Delta compression using up to 10 threads
Compressing objects: 100% (23/23), done.
Writing objects: 100% (28/28), 6.70 KiB | 6.70 MiB/s, done.
Total 28 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), done.
To https://github.com/UserName/Repo.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

下面,我们来解释这些指令的含义。

git remote

git remote add

与远程仓库有关的操作我们都用 git remote 来进行。本来我们的远程仓库和本地仓库毫无关联,使用 git remote add,我们就可以在本地添加远程仓库。上面,我们使用:

git remote add origin https://github.com/UserName/Repo.git

这里的 origin 指的是远程仓库的默认名称,在后面,我们还看到了一串 URL,这是 Github 提供的 URL。当你运行这行命令后,本地仓库和远程仓库就建立连接了。

如果你想查看当前本地仓库相关联的远程仓库,你可以用 git remote 查看当前仓库已添加的远程仓库,如果你想要看更详细的信息,你可以用 git remote --verbose

git remote remove

与之相对的,你可以用 git remote remove origin 来取消关联。(origin 是远程仓库的默认名称)

Push and Pull

有了关联的远程仓库,我们就可以将本地仓库内容上传到远程仓库,这一过程称为 push,即推送。同时,我们也可以把远程仓库的内容下载到本地仓库,这一过程称为 pull,即拉取。

git push

如果本地仓库有相关的改动,我们就可以用 git push origin main 命令来同步远程仓库。我们前面提到过 origin 指的是远程仓库的名称,而 main 是我们当前的分支名。 所以这条命令的作用就是将 main 分支同步推送到远程名叫 origin 的仓库(每次推送一个分支的 commits )。

在推送前,你需要确保提交 (git commit) 所有的修改,因为 git push 只会推送分支的 commits ,而不会推送 changes。

你可以使用下面的命令来将本地分支与远程分支相关联,以后, git push 不需要指定 origin 的仓库名和 main 的分支名。

git push origin main --set-upstream
git push # same as git push origin main

上节课中,我们学到,如果上次提交有问题,我们可以用 git commit --amend 来补救,然而这样就会产生一个新的提交分支。这时,如果你 git push,那么 Git 就会报错。为了解决,你可以用 git push origin main --force 覆盖掉远程提交。如果是合作项目,你可以先拉取最新提交后在推送。

git clone

当你换了一台新设备,或者作为新人参与到一个团队项目中,你就需要先用 git clone 将远程仓库下载到本地。

git clone url a-folder-name

git pull

如果远程仓库有更新,你可以用 git pull 来获取最新的更新。同样的,Git 需要知道你要从哪个远程仓库获取哪个分支的更新。

git pull origin main
git pull origin main --set-upstream
git pull

这条命令相当于:

git fetch origin main # git fetch
git merge origin/main

Branching and Merging in Detail