克隆本地Git仓库后如何推送更改及常见Git命令使用疑问
本地Git仓库推送操作方法
你本地两个仓库之间推送的操作步骤如下:
- 先处理原仓库的推送限制:默认Git不允许向非裸仓库的当前检出分支直接推送,会导致原仓库工作区和提交记录不一致。你可以进入原仓库路径
/original,执行如下配置放开限制,推送后自动同步原仓库工作区:
git config receive.denyCurrentBranch updateInstead
- 进入克隆仓库路径
/cloned_one,直接执行推送命令即可(以下示例分支为main,如果你使用的是master或其他分支,替换对应分支名即可):
git push origin main
如果你不想修改原仓库的配置,也可以反过来在原仓库拉取克隆仓库的变更,进入/original路径执行:
git pull /cloned_one main
常用Git命令区别与适用场景
git fetch
- 作用:只拉取远程仓库的所有提交、分支、标签数据到本地缓存,不会自动合并或修改你当前的工作区内容,日常使用的
git pull本质上就是git fetch+git merge的组合操作 - 适用场景:你想先查看远程有什么变更,再决定要不要合并到自己的本地分支,避免直接拉取带来的意外合并冲突。比如执行
git fetch origin之后可以用git log main..origin/main查看远程main分支比本地多了什么提交,再决定后续操作
git merge
- 作用:把两个分支的提交历史合并到一起,会生成一个新的合并提交,保留两个分支的完整提交历史
- 适用场景:
- 协同开发时要把远程分支的变更合并到自己的本地开发分支,且需要保留完整的提交轨迹
- 合并功能分支到主分支,方便后续排查历史问题的时候能看到完整的分支合并路径
- 注意:如果两个分支修改了同一文件的同一位置,会触发合并冲突,需要手动解决后再提交
git rebase
- 作用:把你当前分支的所有提交“移动”到目标分支的最新提交后面,相当于重写当前分支的提交历史,不会生成额外的合并提交,最终提交线是线性的
- 适用场景:
- 你在自己的本地私有分支开发,想要整理提交历史,让提交线更简洁清晰,方便后续代码评审或合并
- 拉取远程变更的时候不想生成多余的合并提交,保持历史干净
- 注意:绝对不要对已经推送到公共仓库的分支执行rebase,会导致其他协作者的本地历史和远程不一致,出现大量冲突
git push
- 作用:把你本地分支的提交上传到对应的远程分支,只有当你的本地提交是基于远程分支的最新提交时,才能推送成功(也就是快进推送)
- 适用场景:你本地的开发完成,且已经同步了远程的最新变更,没有冲突,要把自己的提交共享给其他协作者的时候使用
git push --force
- 作用:强制用你本地的分支内容覆盖远程分支的内容,不管两边的提交历史是否冲突
- 适用场景:
- 你只在自己的私有分支开发,而且已经对该分支执行了rebase等修改历史的操作,需要同步到远程私有分支的时候
- 远程分支出现了错误提交,确定要覆盖回滚的时候
- 注意:公共分支禁止使用强制推送,会直接覆盖掉其他协作者的提交,导致数据丢失。如果一定要在公共分支用,优先用更安全的
git push --force-with-lease,只有远程分支和你本地拉取的版本一致的时候才会强制推送,避免覆盖别人刚提交的内容
内容的提问来源于stack exchange,提问作者Sadra
相关产品推荐
相关产品推荐

