git 可以在 B 分支直接推送改动给 A 分支合并, 而不用切换到 A 分支的办法吗?

2020-09-05 11:41:22 +08:00
 5bb864e1fc775087

我现在在 dev 分支,提交了一个 commit,想让 master 合并这几个改动
我只知道要先切换到 master 分支,然后再 git merge dev 实现合并
有办法实现不用切换到 master 分支,直接让 master 分支合并这一个 commit 吗?

这种切换到 master 分支,再 git merge 的方式让我这个强迫症难受:

  1. 切换到 master 分支,git 会把我在 dev 分支里新建的文件都删掉,恢复 master 分支的状态
  2. 然后我再 git merge dev,就又把那些文件创建回来

如果我在 dev 分支的 commit 里创建了几百个文件,这一来一回就要改动几百*2 的文件,就很不爽

如果能让 master 分支先合并了,我再切换到 master 分支,这样就不用删这些文件又恢复这些文件

5522 次点击
所在节点    问与答
45 条回复
blindie
2020-09-05 11:42:43 +08:00
可以了解一下 git stash 这个功能
5bb864e1fc775087
2020-09-05 11:52:29 +08:00
@blindie #1 git stash 我知道,但不是这个用途吧? git stash 不就是把未提交的文件,找个地方存起来,然后把暂存区清空(应该是叫暂存区吧忘了),事后可以再恢复出来
5bb864e1fc775087
2020-09-05 11:53:10 +08:00
@5bb864e1fc775087 #2 git stash 跟我说的东西没关系吧
silentsee
2020-09-05 11:54:19 +08:00
git stash
git checkout master
git merge dev
git checkout dev
git stash pop
TMaize
2020-09-05 11:55:36 +08:00
我都是项目再复制一份,一个用来合并,一个用来开发
5bb864e1fc775087
2020-09-05 12:02:31 +08:00
@silentsee #4 好吧 我帖子没说清楚;我举的例子是我当前在 dev 分支, 已经把改的东西都 git commit 了, 这时执行 git status 显示我没有未提交的改动; 这时我在 dev 分支我要把我刚刚在 dev 分支提交的 commit 合并到 master 分支
5bb864e1fc775087
2020-09-05 12:04:57 +08:00
举个例子
git init // 这时我在 master 分支
git checkout -b dev
touch test
git commit -m "test"
然后我现在在 dev 分支, 要把刚刚提交的 commit "test" 合并到 master 分支, 但是不想用 git checkout master; git merge dev 这种方式
lcdtyph
2020-09-05 12:27:16 +08:00
如果你确定这次 merge 可以 fast forward 的话可以这样

git branch -f master dev

但是不建议这么操作
viggoc
2020-09-05 12:38:23 +08:00
cherry-pick 了解一下
sfqtsh
2020-09-05 12:38:45 +08:00
用 worktree 吧
Kobayashi
2020-09-05 12:40:10 +08:00
现在的年轻人怎么都这么懒了? https://stackoverflow.com/q/3216360/5101148
nicklooo
2020-09-05 12:45:50 +08:00
@viggoc 我觉得楼主需要的就是这个
ddsfeng
2020-09-05 13:03:09 +08:00
@Kobayashi 自己先试一下再讲, stackoverflow 上面最高票的回答.

里面讲了两种

第一种:
git fetch . foo:master

这条仅限于 master 到 foo 可以 fast-forward

第二种:
git fetch <remote> +<remoteBranch>:<localBranch>

多的这个+号, 如果用了的话, 是强制将 localBranch 的位置更新到 remoteBranch 位置.

即 如果 master 上有其他的提交, 那么不好意思, 丢了..


所以就目前来说, 如果存在 master 到 当前分支 需要进行正常合并的, 是没有办法 不切换分支进行 merge 的. (参见那个帖子中, 第二个回复).

如果可以 fast-forward 过来的, 参见上面第一种方法.
blindie
2020-09-05 13:07:50 +08:00
@5bb864e1fc775087 不管是 github flow 还是 git flow 都不会频繁出现 merge 到 master 的需求。如果使用 gitlab 合作模式走 mr 提交上 master 则可以直接在 gitlab 上提 mr 。况且我看你回答都懂,4 楼回答完全解决你的问题,为什么不写个 shell ?
newtype0092
2020-09-05 13:11:42 +08:00
如果你分支差异确实这么大,切换起来感觉麻烦的话,重新拉一个仓库长期放在 master 分支就好了,只需合并就 cd 到新仓库的文件夹操作,不用切分支。
gqbre
2020-09-05 13:42:32 +08:00
git rebase dev master
不要轻易尝试,除非你知道怎么还原
5bb864e1fc775087
2020-09-05 14:11:53 +08:00
@blindie #14 4 楼说的就是我主贴里说的,先切到 master 再合并。我平时就是这么做的,只是不爽一来一回删掉文件又恢复回来。所以才来问问有没有不切换到 master 分支的方法
5bb864e1fc775087
2020-09-05 14:22:13 +08:00
@viggoc #9 我理解的 cherry-pick 就是把另一个分支的某个 /某些 commit,单独拿到我当前分支再 commit 一遍。如果我没理解错,那我要的情况就不适合,因为执行 cherry pick 前提我要先切换到 master 分支,但是我要的是不切换到 master 分支的方法
zyfsuzy
2020-09-05 14:31:52 +08:00
cherry-pick 用一下
silentsee
2020-09-05 14:32:57 +08:00
@5bb864e1fc775087 你是说因为这几百个文件的提交导致切换分支很慢吗?按道理不会太慢的,除非你这几百个文件十分巨大。还是说你就是强迫症,觉得有几百个文件的变动就会让你不爽?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704420

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX