【Git】将本地工程推送至 GitHub 仓库的基本流程
1 Prerequisite
1.1 Git 更新
参考文档: Link
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git
1.2 Git 设置
- 设置 Git 的用户名和邮箱
git config --global user.name "username"
git config --global user.email "email"
如果不设置用户名和邮箱,就无法执行 git commit
,报错如下: *** Please tell me who you are.
- 设置 Git 的默认文本编辑器 (VSCode or Vim)
git config --global core.editor "code --wait --new-window"
git config --global core.editor "vim"
- 设置 Git 的默认分支名为
main
在 Git 2.28 及以上版本才会生效
git config --global init.defaultBranch main
- 查看设置信息
git config --global --list
1.3 GitHub 身份验证
配置 GitHub 对本机的身份验证,参考我的这篇文章: Link
2 基本流程
2.1 在 GitHub 上创建一个新的仓库
2.2 初始化本地仓库
- 在工作目录初始化
git init
- 将文件添加到暂存区
- 可以用
.gitignore
文件来忽略某些文件或目录,书写格式参考文档: Link - 用
.gitkeep
文件来跟踪空文件夹以保持目录结构
git add .
- 提交文件到本地仓库
简单的信息用 -m
参数,复杂的信息建议使用 git commit
打开文本编辑器
git commit -m "Initialize repository"
# or
git commit
如果在 git push
之前要修改本次提交的信息,可以用下面的命令,参考文档: Link
git commit --amend
- 查看本地分支
git branch
2.3 添加远程仓库引用
将 origin
设置为远程仓库的引用(别名),通常使用 origin
作为默认远程仓库的名字,也可以用其他自定义的名称
git remote add origin [ssh url]
# 查看信息
git remote -v
如果报错如下: fatal: remote origin already exists.
,则先删除原有的远程仓库配置,再进行关联
git remote rm origin
如果远程仓库是新建的空仓库,可以直接将本地分支推送至远程仓库,无需后面的步骤
git push -u origin main
- -u: 设置本地分支与远程分支的上游(upstream)相关联,后面可以只使用 git push 或 git pull,Git 会知道将本地的 main 分支与远程的 main 分支进行同步
2.4 更新远程仓库状态
从远程仓库中获取最新的提交和数据,并将其下载到本地仓库,但它并不会合并这些提交到当前的工作分支,即不会改变工作区文件内容。
- 获取远程仓库的最新状态
git fetch origin
- 查看本地分支和远程跟踪分支
git branch -a
2.5 关联本地分支与远程分支
设置了分支关联,就可以轻松地使用 git pull
和 git push
等命令,而不需要每次都指定分支的名称。
git branch -u origin/main main
- 查看本地分支与远程分支之间的关联信息
git branch -vv
2.6 合并本地分支与远程分支
将远程分支合并入当前本地分支
git merge origin/main
若执行后报错: fatal: refusing to merge unrelated histories
,则加参数 --allow-unrelated-histories
git merge origin/main --allow-unrelated-histories
2.7 处理合并冲突
参考文档: Link
合并时可能会有文件存在冲突,如下图:
输出信息中提示 fix conflicts and then commit the result
:
- 打开存在冲突的文件
冲突的地方会以普通文本的方式标注出来:
=====
为分割线<<<<<
为当前分支内容>>>>>
为合并进来的分支内容
<<<<<<< HEAD
....
=======
....
>>>>>>> xxx
-
自行对冲突的地方进行修改,VSCode 上比较容易操作
-
处理完冲突后,重新 commit
git add .
git commit -m "Resolved merge conflicts"
- 再次合并,查看是否还存在问题
git merge origin/main
# 输出 Already up to date.
2.8 推送至远程仓库
如果当前分支关与远程分支进行了关联,这里就不用写分支名了,直接 git push
git push origin main
如果想要删除 GitHub 仓库中已 push 的某文件或目录,并且在工作区保留,以 .vscode
文件夹为例:
- 在暂存区中删除
git rm --cached -r .vscode/
-
将
.vscode/
写入.gitignore
文件,确保之后不会再跟踪 -
commit
&push
git commit -m "Update .gitignore to ignore .vscode folder"
git push origin main
3 在新的分支中继续开发
建立新的分支,在其中实现新的功能或是完善之前的工程,这样在开发过程中就不会影响到之前完整的工程代码,待完成后,可以向 main
分支发起合并请求。
- 创建、切换到本地新分支
git branch develop
git checkout develop
上面的可以用一条命令代替
git checkout -b develop
- 创建远程新分支
git push origin develop:develop
# 查看所有分支
git branch -a
- 远程分支与本地分支关联
git branch --set-upstream-to=origin/develop develop
# 查看信息
git branch -vv
4. push
& pull
测试
进行了上一步的关联,如果只对
origin/develop
进行操作,就不用加分支名
git pull
git push
但如果没有进行关联,就要加上分支名
git pull origin develop:develop
git push origin develop:develop
4 删除远程分支
- 删除 GitHub 仓库的分支
git push origin -d <remote-branch-name>
- 删除本地存储的远程分支
若 git branch -r
中仍存在该远程分支名,可以用下面的命令删除
git branch -d -r origin/<remote-branch-name>