上传大型repo时,能否在另一终端标签页创建并checkout新分支?
完全可以放心操作,不会有任何问题!
先给你吃个定心丸:当你在一个终端推送master分支到GitHub/Bitbucket时,完全可以在另一个终端标签页创建、切换新分支并开展本地工作——Git的设计天然支持这种场景,不会破坏正在进行的推送进程,也不会引发冲突或数据损坏。
为什么这是安全的?
Git的本地操作和远程推送是完全独立的两个流程:
- 推送进程(
git push)只是读取本地仓库中master分支的历史提交数据,把它们同步到远程仓库,这个过程不会修改本地仓库的任何内容(除非你用了强制推送--force,但正常推送不会)。 - 你在另一个终端创建新分支、切换分支、本地提交代码这些操作,都是在操作本地仓库的分支指针和新的提交对象,完全不会触碰
master分支已经准备好要推送的历史数据。
你可以放心做这些操作:
- 创建并切换新分支:比如执行
git checkout -b new-feature或者git switch -c hotfix-ui,这只是新建一个指向当前提交的分支指针,对master分支没有任何影响。 - 在新分支上写代码、提交:所有本地提交都会归属到新分支,和
master的历史完全隔离,推送master的进程根本不会关心这些新内容。 - 甚至可以在新分支上做本地的rebase、merge(只要不涉及正在推送的
master),也完全没问题。
需要注意的小细节
唯一要避免的是:不要在推送master的期间,修改master分支本身的历史或内容(比如在master上提交新代码、做rebase、reset操作)。如果这么做,可能会导致推送完成后本地master和远程master的历史不一致,但只要你是在新分支上工作,就完全不会碰到这个问题。
举个实际操作的例子,直观感受下:
# 终端1:正在执行推送,耗时较长 git push origin master # 终端2:同时进行的操作,完全安全 git checkout -b payment-fix # 编辑代码文件... git add src/payment.js git commit -m "Fix payment gateway timeout issue"
等终端1的推送完成后,你可以继续在新分支上开发,之后正常通过PR或者merge把新分支的内容合并到master即可,和平时的开发流程没有任何区别。
内容的提问来源于stack exchange,提问作者Brian Hernandez
相关产品推荐
相关产品推荐

