GitHub工作流学习
第一步:克隆远程仓库
使用 git clone 命令将远程仓库克隆到本地
1 |
|
Remote:表示远程的仓库
Local:表示本地的仓库
Disk:是源文件真正在磁盘的样子,也是编辑器打开源文件的状态。
在刚进行完 git clone 的时候,Remote、Local、Disk 中的内容是一样的。
第二步:建立新的 feature branch
1 |
|
建立一个新的feature branch。这会复制一份当前 branch 到新 branch上,相当于把当前main branch复制到了my-feature上。因此现在在 Local 上有 main 和 my-feature 两个branch。
建立feature branch而不直接往 main 上 push 代码的好处是,这样不会导致主分支无法正常工作,有利于多人合作开发项目。
其中”my-feature“就是branch的名字。这里branch根据实际命名
第三步:修改代码
当在本地修改代码并保存后,硬盘上的文件是有所变化的,但是git是一无所知的,可以使用下面的命令查看现在硬盘和git保存的分支有什么区别。
1 |
|
当决定想把修改的文件告知 git 的时候,可以使用 git add 命令放入暂存区。
1 |
|
或者使用下面的命令将所有修改的文件放入暂存区。现在git就知道了有一些代码想要 commit
1 |
|
在进行 git add 添加想修改的文件后,可以使用 git commit 把修改真正的提交给git,此时可以使用git commit 命令
1 |
|
在Disk git 执行了 git commit 后,Local git 就会新增一个 commit
第四步:git push
接下来将Local git 的变化告知 GitHub,使用git push origin my-feature
1 |
|
那么现在github就会多出一个新的branch,是my-feature 保存着修改后的代码。
第五步:更新合并代码
这一步就需要把更新好的代码合并到main branch中,这个过程称为:pull request
pull request的含义为:request当前项目的所有者将新的分支的改变给pull到项目中。
然后main branch 的维护者审查代码后,会使用 squash and merge
GitHub 使用 Squash and Merge 的主要作用是将功能分支的多个提交压缩为一个单独的提交后合并到目标分支(如 main
或 **master
**),从而保持目标分支的提交历史简洁。
在pull request 被 merge 后,一般情况后会把远端 my-feature branch 删掉
然后更改 Local git 上的 branch。
- 切换到 main branch
1 |
|
- 删除 my-feature
在Local branch中删掉my-feature
1 |
|
- 把最新的更新拉取到Local 的 main branch
1 |
|
在进行一系列操作后,Local、Disk 就和 Remote 一致了
例外情况:在push后如果main更新了
在把改动Push到my-feature后,可能main(master)分支已经更新了。因此需要确认my-feature在mian branch update是否仍然可用,所以要把main分支的更新同步到my-feature分支中。
下面将main branch的更新同步到my-feature里。
- 首先更新 Local branch,此时可以看到当前local branch中的main 和 Remote branch的main是不一样的
切换到 main branch中,使用
1 |
|
这时候硬盘中源代码就是Init状态,就不是刚刚修改的状态
然后运行下面命令,将远端的代码同步到Local的main中,这个时候Local 和 Disk 中的branch就和Remote一样了。
1 |
|
回到 my-feature 中
1
git checkout my-feature
当前my-feature的代码就是有修改后f-commit的变化,但是没有Remote update的变化,现在需要同Remote update的变化,使用下面命令。
1 |
|
git rebase main 含义的意思是:先把本地修改放一边,把main最新修改更新后然后再讲本地修改的commit尝试更新。在这个过程中有可能会有 rebase conflict,那么就需要手动选择到底要哪一段代码。
在命令执行成功后,my-feature branch就变成下面的样子
在更新完my-feature branch之后,需要git push origin my-feature,把Local branch push到github上。
1
git push -f origin my-feature
参考
- 【十分钟学会正确的github工作流,和开源作者们使用同一套流程】 https://www.bilibili.com/video/BV19e4y1q7JJ/?share_source=copy_web&vd_source=83ecb40e0aba9eb1808acef2324b7653