Git 的origin和master解析

本文详细介绍了Git的基本操作流程,包括从远程仓库克隆代码、本地代码的修改与提交,以及如何将本地更改推送到远程仓库。同时,文章还解释了远程分支与本地分支的概念及它们之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样)

1.     git取数据(git clone

2.     改动代码

3.     将改动传回gitgit push

3个步骤又涉及到两个repository,一个是remote repository,再远程服务器上,一个是local repository,再自己工作区上。其中

1, 3两个步骤涉及到remote server/remote repository/remote branch

2涉及到local repository/local branchgit clone 会根据你指定的remote server/repository/branch,拷贝一个副本到你本地,再git push之前,你对所有文件的改动都是在你自己本地的local repository来做的,你的改动(local branch)remote branch是独立(并行)的。Gitk显示的就是local repository

 

clone完成之后,Git 会自动为你将此远程仓库命名为originorigin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义)(guyue: 即origin是代表远程仓库的一个默认别名, 可以在项目工程目录中.git/config文件中查看或修改),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地),但你无法在本地更改其数据。

同时,Git 会建立一个属于你自己的本地master 分支,它指向的是你刚刚从remote server传到你本地的副本。随着你不断的改动文件,git add, git commitmaster的指向会自动移动,你也可以通过mergefast forward)来移动master的指向。

 $git branch -a (to show all the branches git knows about)

* master

  remotes/origin/HEAD -> origin/master

  remotes/origin/master

 

$git branch -r (to show remote branches git knows about)

  origin/HEAD -> origin/master

  origin/master

 

可以发现,master就是local branchorigin/masterremote branchmaster is a branch in the local repository. remotes/origin/master is a branch named master on the remote named origin

$git diff origin/master master show me the changes between the remote master branch and my master branch).

需要注意的是,remotes/origin/masterorigin/master的指向是相同的

$git diff origin/master remotes/origin/master

 

git push origin master

origin指定了你要push到哪个remote

master其实是一个“refspec”,正常的“refspec”的形式为”+<src>:<dst>”,冒号前表示local branch的名字,冒号后表示remote repository branch的名字。注意,如果你省略了<dst>git就认为你想pushremote repository下和local branch相同名字的branch。听起来有点拗口,再解释下,push是怎么个push法,就是把本地branch指向的commit pushremote repository下的branch,比如

$git push origin master:master (local repository中找到名字为masterbranch,使用它去更新remote repository下名字为masterbranch,如果remote repository下不存在名字是masterbranch,那么新建一个)

$git push origin master (省略了<dst>,等价于“git push origin master:master”)

$git push origin master:refs/for/mybranch (local repository中找到名字为masterbranch,用他去更新remote repository下面名字为mybranchbranch)

$git push origin HEAD:refs/for/mybranch HEAD指向当前工作的branchmaster不一定指向当前工作的branch,所以我觉得用HEAD还比master好些)

$git push origin :mybranch (再origin repository里面查找mybranch,删除它。用一个空的去更新它,就相当于删除了)

### 使用 `git pull origin` 的方法以及解决常见问题 当执行 `git pull origin` 命令时,可能会因为多种原因而出现问题。以下是关于如何正确使用该命令及其可能解决方案的详细介绍。 #### 正确使用 `git pull origin` `git pull origin` 是一种用于从远程仓库拉取最新更改并将其合并到当前分支的操作。如果希望指定某个特定分支,则可以使用以下语法: ```bash git pull origin <branch-name> ``` 例如,在开发环境中工作时,通常会将远程 `dev` 或 `master` 分支上的更新同步至本地分支。假设目标分支名为 `dev/mmm`,则应运行以下命令[^1]: ```bash git pull origin dev/mmm ``` 此操作将会把来自远程仓库 `origin` 中的 `dev/mmm` 分支的内容下载并与当前分支进行自动合并。 #### 解决常见的 `git pull origin` 问题 ##### 1. 多个 Remote 导致冲突 如果有多个远程仓库配置 (`remote`) 并尝试通过简单的 `git pull origin` 来获取数据,这可能导致失败。此时需明确指出源地址及具体分支名称来规避此类错误。例如: ```bash git pull origin dev/<specific-branch> ``` 之后可以通过检查是否有未完成的合并过程确认状态正常与否[^1]: ```bash git merge upstream/master ``` 如果显示 "Already up-to-date." 则表示已成功同步且无需进一步处理。 ##### 2. 合并冲突 (Merge Conflicts) 在某些情况下,您可能会面临文件之间的差异无法被 Git 自动解析的情况——即所谓的 **merge conflicts**。这种情形下,Git 将暂停合并流程直到手动编辑受影响区域为止。一旦解决了这些冲突,请标记它们已被修复并通过继续合并步骤完成整个过程: ```bash git add . git commit -m "Resolved merge conflict" ``` 对于更复杂的场景比如需要压缩提交记录再做合并时可参考下面的方式[^2]: ```bash git checkout master # 转换回主分支(master) git pull apache master # 更新至最新的远端HEAD位置 git merge --squash ROCKETMQ-xxxx # 执行带压缩选项的合并动作 ``` ##### 3. 新增 Branch 显示于 IDE 如 Eclipse 如果您已经创建了一个新的分支但是它并没有出现在像Eclipse这样的IDE里边的话,那么很可能是因为还没有设置追踪关系或者根本没有推送出去让服务器知道它的存在先前提到了clone的时候默认添加了叫作'origin'的东西实际上就是指定了一个叫做‘origin’的remote server所以我们可以利用这一点来做相应的调整首先确保新建立起来的那个branch已经被push过了就像这样子[^4]: ```bash $ git add . $ git commit -m "Added first feature branch" $ git push -u origin feature/task-1 ``` 最后一步非常重要因为它不仅上传了这个feature/task-1而且也设置了upstream information使得以后可以直接简单地说pull/push而不必每次都写全路径名另外记得刷新一下你的IDE界面以便看到最新的变化情况[^5]. ### 总结 以上介绍了几种典型的围绕着`git pull origin`所发生的状况连同对应的处置办法无论是基本概念还是实际应用层面都做了较为详尽的阐述希望能够帮到正在为此苦恼的朋友!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值