先说结论
git merge origin master
- 意思是当前的分支,进行合并,合并二个分支分别是远程分支master在本地的副本和本地分支的master
git merge master
- 当前分支于本地所处的master分支进行合并
- 还有就是
- git merge origin master是把origin merge 到 master 上的说法是错误的!!!
git merge实践出真理(放弃,待填坑)
准备工作
-
建立二个分支
stream
分支stream-qiuye
分支
-
三个分支分别在文件添加内容,并提交到远程(图片下面这行字忽略)
- 分支切换到main分支
前置需要了解
origin 并不是指得是远程的仓库,而是指得是远程仓库在本地的一个指针(这个指针有可能过时的)。当我们使用使用merge 的时候,我们进行合并的时候只是上一次fetch 从远程拿到的版本。不是远程仓库的最新版本
-
在另外一个人向main分支推送了新内容,本地没有更新,并且本地所处main分支情况下进行下面二个操作(为保证效果,)
-
get merge origin
-
get merge origin/main
尝试(放弃,待填坑)
- 分支都切换在main分支进行操作
- 主分支名称我改了默认的,改为了main
git merge origin main操作合并(放弃,待填坑)
-
git merge origin main
(另外一个人在main分支做了修改并提交到了远程服务器,并且本地还没有pull的情况) -
当然,你可以会出现这种情况
merge: origin - not something we can merge
合并命令更换为即可,效果是一样的
git merge origin/main main
git merge main操作合并(放弃,待填坑)
git merge main
那么再看看看push吧
提前总结
#如果想在当前分支想要更新现在所处的分支或者上传到远程同名的分支
#直接下面一行代码就可以
git push/pull origin 分支名即可
#如果想要在其他分支更新或者推送其他分支,则需要完整的写法
git push/pull <远程主机名> <本地分支名>:<远程分支名>
#git pull举例子
#比如我在stream分支,想要更新(pull)main分支,你可以像下面这样子做
#方法1-先切换到main分支
git checkout main
git pull origin main #表示远程分支和当前所处分支合并
#方法2-不变更当前分支进行更新main分支(我不知道该怎么做-有的话可以评论留言)
#git pull origin main:main如果直接这样子,会导致当前分支于main合并
说明
- push写法你们可能像下面一样的写法
# 这句话代码意思就是
# 将本地的推送feature/stream到远程仓库的feature/stream
git push origin feature/stream
- 不过其实这种写法不是完整的写法,而是一种简写,完整的写法应该是如下
# 这句话代码意思就是
#将本地的推送feature/stream到远程仓库的feature/stream
git push origin feature/stream:feature/stream
- 完整的语法示范如下,所以后面的远程分支名不写,则表示远程分支是与当前分支合并
- @具体可以看-git-pull
git push <远程主机名> <本地分支名>:<远程分支名>
同时git pull也是和git push是差不多的,只不过调换了下顺序最后,因为pull是拉取分支,用户肯定想要是默认输入远程分支,而不是本地分支
git pull <远程主机名> <远程分支名>:<本地分支名>
之前看过有人说git merge的时候没有origin就是本地和远程
- 这老铁回答的没毛病,
origin
就代表的远程分支(可以这么认为),现在分支名称为feature-qiuye
为例 - 本地分支执行:
git merge origin/feature
- 就是代表本地分支和远程上的
feature
进行合并,也就是远程文件和本地文件合并,而非本地合并
- 就是代表本地分支和远程上的
- 本地分支执行:
git merge feature
- 就是代表本地分支和本地上的feature进行合并,也就是本地文件进行合并操作
搜索问题之git pull 更新非当前分支会连同当前分支一起合并
- 问
如果当前分支是 master,那么执行 git pull origin test:test 不仅会合并 test-->origin/test,还会合并当前分支 master-->origin/test
- 答
我觉得主要是命令的语法有问题。
如果用推送代码,那么你用 git push origin bch1:bch2 命令的目的就很明确。指定远程仓库,指定本地分支bch1推送到远程分支bch2.
但是如果是git pull,这是拉取远程历史并同步到本地分支的动作。而你指定的分支又不是当前工作分支。这就很容易有歧义了。这个问题可以通过改变命令的方式来解决。
先 git fetch 远程仓库的历史。
再切换到要同步的本地分支,然后再merge origin/test 好了。
或者是切换到 本地 test分支,再直接git pull origin/test 好了。
参考文章
git文档参考1
git文档参考2
git的origin的含义
Git 里面的 origin 到底代表啥意思?
git merge origin master和git merge origin/master的区别
git fetch,git pull