开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支
- git checkout dev
- git pull
- git checkout master
- git merge dev
- git push -u origin master
二、当master代码改动了,需要更新开发分支(dev)上的代码
- git checkout master
- git pull
- git checkout dev
- git merge master
- git push -u origin dev
当前分支是master分支,想要合并mock分支的最后一次提交记录
- ## 1、查看当前分支,以及是否有mock分支
- git branch
- ➜ transaction-mini git:(master) git branch
- * master
- mock-202503131203
- (END)
- ## 2、如果不在master分支,切换回master分支,在的话,这一步忽略
- git checkout master
- git pull origin master
- ## 3、查看mock分支最后一次提交的日志
- git log mock-202503131203 -1
- ➜ transaction-mini git:(master) git log mock-202503131203 -1
- commit 2a78759764784417440a8d8436b1d392939fb2ad (origin/mock-202503131203, mock-202503131203)
- Author: yoyo <398927951@qq.com>
- Date: Fri Mar 14 11:00:28 2025 +0800
- 分享弹窗
- (END)
- ## 复制输出的提交哈希值,例如 2a78759764784417440 (截取一部分就行)
- ## 4、使用 cherry-pick 合并最后一次提交
- git cherry-pick 2a78759764784417440
- ➜ transaction-mini git:(master) git cherry-pick 2a7875976478441744
- [master 7718914] 分享弹窗
- Date: Fri Mar 14 11:00:28 2025 +0800
- 1 file changed, 70 insertions(+)
- create mode 100644 custom/components/ext-popup-share.vue
- ## 5、如果有冲突,解决冲突后执行:
- git add .
- git cherry-pick --continue
同样也是cherry-pick,但是不需要查看日志的ID的同步方式:
要把 mock 分支最新的修改合并到 master
如果希望把 mock 最新的修改同步给 master,而不是整个 mock 历史(避免带入旧 commit),推荐用 cherry-pick 或 merge --no-ff。
- # 1. 推送 mock 分支最新代码
- git push origin mock
- # 2. 切换到 master 分支
- git checkout master
- # 3. 拉取最新的 master
- git pull origin master
- # 4. 把 mock 分支上的最新提交(比如最近一次或几次)合并进 master
- # 假设只想合并 mock 上的最后 1 个提交:
- git cherry-pick mock
- # 如果想合并最近的 3 个提交:
- git cherry-pick mock~2..mock
- # 5. 推送到远程 master
- git push origin master
cherry-pick 是按提交来“挑选”变更,不会带上 mock 分支旧的 commit 历史,非常适合这种“只要最新修改”的情况。
cherry-pick遇到冲突的时候:
先删除所有冲突的标记:
- <<<<<<< HEAD
- =======
- >>>>>>> ...
标记为已解决并继续 cherry-pick
保存修改后,运行以下命令:
- git add app/components/Header.vue
- git cherry-pick --continue
如果发现改得不对,想放弃这次 cherry-pick:
- git cherry-pick --abort
这样会回到 cherry-pick 之前的状态。
查看所有远程分支
- git branch -r
直接拉取指定分支cnooc
- git clone -b cnooc 地址
git冲突
- git reset HEAD 冲突的文件
- git checkout .
- git pull origin 分支名
创建本地分支(2.0.1.20120806是分支名称,可以随便定义)
- git branch 2.0.1.20120806
切换本地分支
- git checkout 2.0.1.20120806
远程分支就是本地分支push到服务器上。比如master就是一个最典型的远程分支(默认)。
- git push origin 2.0.1.20120806
远程分支和本地分支需要区分好,所以,在从服务器上拉取特定分支的时候,需要指定远程分支的名字。
- git checkout --track origin/2.0.1.20120806
注意该命令由于带有--track参数,所以要求git1.6.4以上!这样git会自动切换到分支。
提交分支数据到远程服务器
- git push origin <local_branch_name>:<remote_branch_name>
例如:
- git push origin 2.0.1.20120806:2.0.1.20120806
一般当前如果不在该分支时,使用这种方式提交。如果当前在 2.0.1.20120806 分支下,也可以直接提交
git push
删除远程分支
- git push origin :develop
删除本地分支
- git branch -D 本地分支名
从已有的分支创建新的分支(如从master分支),创建一个dev分支
- Git checkout -b dev
创建完可以查看一下,分支已经切换到dev
- git branch
- * dev
- master
提交该分支到远程仓库
- git push origin dev
测试从远程获取dev
- git pull origin dev
重命名分支,从main改为master
- git branch -m main master
- git push -u origin master
强制删除本地dev分支并同步远程的dev分支
- # 强制删除本地dev分支
- git branch -D dev
- # 拉取远程仓库所有信息
- git fetch origin
- # 切换到远程dev分支
- git checkout dev
- # 这时你的本地dev分支将会同步远程的dev分支
一个分支的upstream,其实就是与远程分支做关联,告诉git,默认此分支为推送及拉取的远程分支的信息。
upstream的设置
基本设置
1
$ git branch --set-upstream-to=origin/dev
或
1
git branch -u origin/dev
此命令的含义是,是指当前分支的upstream为origin远程仓库的dev分支。
在推送的同时,同时设置upstream
1
$ git push -u origin master
命令的含义是,推送master分支到远程origin仓库master分支,并且建立本地分支master的upstream为origin/master。(关于git push更详细的解释,请参考第04章)
不切换分支直接设置其他分支的upstream
1
$ git br -u origin/br01-remote br01
设置本地分支br01的upstream为origin/br01-remote。
或push的时候直接设置。
1
$ git push -u origin br03:br03
取消upstream
取消当前分支的upstream
1
$ git branch --unset-upstream
取消其他分支的upstream
1
$ git branch --unset-upstream [分支名]
查看upstream
查看upstream信息,主要是查看仓库目录下.git/config文件。
- $ cat .git/config
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- [remote "origin"]
- url = git@github0123:jeremy0123/fetch.git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
- [branch "br01"]
- remote = origin
- merge = refs/heads/br01-remote
- [branch "br03"]
- remote = origin
- merge = refs/heads/br03
其中[branch "分支名"]下的信息就是upstream信息,remote项表示upstream的远程仓库名,merge项表示远程跟踪分支名。
另外,config中[remote "远程仓库名"]下的url和fetch需要注意下,这些信息可以和第02章的clone信息对应起来。
也可以通过git remote show查看。
- $ git remote show origin
- * remote origin
- Fetch URL: git@github0123:jeremy0123/fetch.git
- Push URL: git@github0123:jeremy0123/fetch.git
- HEAD branch: master
- Remote branches:
- br01-remote tracked
- br03 tracked
- master tracked
- Local branches configured for 'git pull':
- br01 merges with remote br01-remote
- br03 merges with remote br03
- master merges with remote master
- Local refs configured for 'git push':
- br03 pushes to br03 (up to date)
- master pushes to master (up to date)
Remote branches表示远程仓库的分支,git pull表示upstream跟踪分支。
问题:
相关贴子:https://my.oschina.net/dlpinghailinfeng/blog/309001
一、git 报错:
- error: Malformed value for push.default: master error: Must be one of nothing, matching, simple, upstream or current. fatal: bad config variable 'push.default' in file 'C:\Users\Win10/.gitconfig' at line 5
解答:git输入
- git config --global push.default matching
