在安装和配置好 Git Bash 后,将文件或者修改后的文件推送到 GitHub上,分为以下几种情况:

一、本地不存在该仓库,而 GitHub 上已有该仓库

1、先在本地创建一个空的文件夹(如 Test ),用来放从 GitHub 上克隆下来的 repository。

【注】:将相应的项目克隆到本地,由于要克隆的项目已经自带有 .git 目录,所以无需进行 git init 来初始化。若是在本地新建的仓库项目,则需要 git init 进行初始化。

1
2
mkdir Test            # 为将要进行Git管理的项目建立新的文件夹
cd Test # 进入新建的文件夹

2、再将 GitHub 上的项目 repository 克隆到本地

默认克隆 main 分支内容,执行 git clone 命令后我们会默认处于 main 分支下,同时系统会自动将 origin 设置成该远程仓库的标识符。

1
git clone https://github.com/username/hello-world.git   #将 GitHub 上的对应仓库克隆到本地

3、克隆到本地之后便可以在本地进行编辑修改,再推送到 GitHub 上即可。在本地编辑、查看与推送操作如下:

1
2
3
4
5
6
7
8
9
10
cd hello-world                  #进入到在GitHub上所创建的repository中,(已经拷贝到本地的)
touch README.md #创建README.md文件
vim README.md #编辑README.md文件
git status #查看仓库的状态,显示有无改动及添加新的内容,以便将其提交
git add README.md #将README.md中修改的内容添加到暂存区
git commit -m "add README" #将暂存区中的README.md文件进行提交保存,并添加注释(引号中的内容)
git log # 查看提交日志

git push #将本地仓库的更新,推送到GitHub上。使GitHub上的内容更新。
#因为该仓库是从GitHub上克隆下来的,所以默认已经建立上下游的联系,无需再将重复将其添加到上游的远端

二、本地已经存在该仓库,而 GitHub 上没有

1、首次将本地的仓库推送到远程(GitHub)仓库时。首先在 GitHub 上建立一个仓库,并将其设置为本地仓库的远程仓库。为了使 GitHub 上新建的仓库与其他仓库不混淆,使其与本地仓库有同样的名称。同时如果本地已经存在 README.md 文件时,Initialize this repository with a README 选项就不要勾选,以免与本地的 README.md 相冲突;如果本地仓库中没有 README.md 文件时,此时可以勾选该项。如下图

img

2、进入到本地仓库中,并用 git init 来对本地的仓库进行初始化

1
2
cd  Test          #进入到本地需要管理的项目目录中
git init #初始化需要管理的目录,使其能够被 Git 进行管理

3、使用 git remote add 命令,来设置本地的远程仓库

执行git remote add命令之后,Git 会自动将 https://github.com/username/git-tutorial.git 远程仓库的名称设置为origin(标识符)

1
git remote add origin https://github.com/username/git-tutorial.git  #将其设置成本地的远程仓库

4、将所有改动的内容提交到暂存区并保存

1
2
git add .                        #把工作时的所有变化提交到暂存区,不包括删除的文件
git commit -m "Initial commit" #保存变化,并添加注释

【注】:本地仓库的内容推送到远程仓库之前,必须要将本地仓库中的内容提交到相应的分支中,否则该分支的内容将不会被推送到远程仓库中,而只是在远程仓库中建立了相应的分支而已。

5、将当前分支下本地仓库中的内容推送至远程仓库中。分为两种情况:main 分支、其它子分支

(1)、将 main 分支的本地仓库内容推送到远程仓库中(此时该远程仓库中还没有 main 分支,只是一个空仓库)

1
2
3
4
git checkout master            #如果当前分支不是master,则首先切换到 master分支下。

git push -u origin master #将本地仓库的master分支,推送到远程仓库的master分支中
#(注:只用于首次推送时将远端master设置为当前仓库的上游,以后再推送直接 git push即可)

【注】:执行以上操作后,当前分支的内容就会被推送给远程仓库 origin 的 master 分支。-u 参数可以在推送的同时,将 origin 仓库的master 分支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从 origin 的master 分支获取内容,省去了另外添加参数的麻烦。若没有 -u 这个参数,则在后面的 git pull 时,就需要指明拉取的是那一条分支,如:git pull origin f03 ,表示拉取的是远程的 f03 分支:origin/f03

(2)、将本地的其它子分支推送至 main 以外的分支,如将本地的 feature-D 分支以同名的形式推送至远程仓库(此时远程仓库中并没有 feature-D 分支)

1
2
git checkout -b feature-D        #在本地新建feature-D分支,并切换到该分支下
git push -u origin feature-D #将feature-D推送至GitHub上,并保持该分支名称不变

三、在本地和 GitHub 上都已经存在该仓库

1、在本地和远程的 GitHub 上都已经存在该仓库,则在本地和 GitHub 上都不需要再重新创建该仓库了。只需要先将本地和远程的仓库之间创建联系。将本地 GitHub 上的该远程仓库设置为本地仓库的远程端。

2、具体操作如下:

1
2
3
cd  Test
git remote add origin https://github.com/username/git-tutorial.git
git push -u origin --all

四、更新本地及远程仓库的分支

【注】:此时本地和远程上都已经有该仓库,只是其中有一个不是最新的

在多人同时开发,当本地仓库中的某一分支没有与远程仓库的该分支保持最新时,需要用 git pull 来获取最新的远程仓库分支。在本地进行修改之后可以用 git push 推送到 GitHub 上。

获取最新的远程仓库分支。远程仓库的 feature-D 分支是最新的状态,将本地的 feature-D 分支更新到这个最新的状态,此时 pull 后面要加上拉取分支的名称,来明确指定拉取哪个分支。

在本地仓库修改之后提交到远程仓库中,会根据使用的工具不同有不同的处理方式。在此主要考虑两个同步方式:(1) GitBash 命令行的方式, (2) TortoiseGit 图形界面的方式。这两种方式的主要区别在于提交命令 git commit 前的操作。

(1) 使用 GitBash 命令行时,本地的修改在 git commit 前必须要先将所有的改动 git add 到追踪中去,否则后续提交的将无法同步到远端

(2) 使用 TortoiseGit 图形界面时,只需要在首次增加新文件时需要 git add 命令来添加到版本追踪去,若后续再出现改动,直接 git commit 提交即可,无需再添加到版本控制中。