Chr*_*ris 178 git version-control
我有两个分支,master和dev.我一直在使用dev,只有在批准生产使用后才能将代码检入主分支.当我这样做时,我必须做以下事情:
git checkout master
git merge dev
git checkout dev
Run Code Online (Sandbox Code Playgroud)
这非常冗长,而且由于我经常这样做,我想尽量减少它.有没有一个git命令可以用来从我当前的分支dev合并到另一个分支master而不必先检查master分支?有点像:
git merge dev to master
Run Code Online (Sandbox Code Playgroud)
会很棒的.我查看了git文档并没有看到任何内容.
小智 91
1.为本地存储库添加远程别名,例如:
git remote add self file:///path/to/your/repository
Run Code Online (Sandbox Code Playgroud)
(或在Windows上git remote add self C:\path\to\your\repository)
2.推到自我遥控器,例如:
git push self dev:master
Run Code Online (Sandbox Code Playgroud)
Kev*_*yda 56
@zerome目前得票最高的答案是一个很好的答案,但有点不必要的冗长.
在你的git repo的基础上你可以这样做: git push . dev:master
可以在树中的任何位置使用的更通用的解决方案是:
git push $(git rev-parse --show-toplevel) dev:master
Run Code Online (Sandbox Code Playgroud)
Cas*_*bel 44
你最好的选择就是使用一个别名,放在你的全局gitconfig(~/.gitconfig)中:
[alias]
merge-to = "!f() { git checkout $1 && git merge $2 && git checkout -; }; f"
Run Code Online (Sandbox Code Playgroud)
这样你就可以从任何存储库中调用它
git merge-to master dev
Run Code Online (Sandbox Code Playgroud)
Dmy*_*iak 38
Jefromi别名的一点修改,不需要您输入当前分支.
所以,你使用它像:git merge-to dev.
这将切换到dev分支,将其与CURRENT合并,然后切换回.
例如,假设您在master分支上,它会将主服务器合并到dev中,您仍然会在主服务器上.
它绝对是我的dotfiles :)
[alias]
merge-to = "!gitmergeto() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset tmp_branch; }; gitmergeto"
Run Code Online (Sandbox Code Playgroud)
小智 6
这是旧的,但......
结合@ kevin-lyda和@ dmytrii-nagirniak上面的解决方案.此别名将当前分支合并到指定的分支中.它使用遥控器方法,并使用git命令来获取上下文.
[alias]
merge-to = "!gitmergeto() { git push \"`git rev-parse --show-toplevel`\" `git rev-parse --abbrev-ref HEAD`:$1; } && gitmergeto"
Run Code Online (Sandbox Code Playgroud)
要像以下一样使用:
git merge-to other-branch-name
Run Code Online (Sandbox Code Playgroud)
将当前分支合并到另一个分支而不检出另一个分支:
这真的很容易。根据定义,快进合并只是意味着分支指针在提交树中向前移动。所以你需要做的就是模拟:
git branch -f master dev
Run Code Online (Sandbox Code Playgroud)
注意事项:这假设
master指向也在dev分支或其他某个分支中的提交。否则,您将面临失去工作的风险!与git merge在无法进行快进时创建合并提交(或抱怨)不同,此方法静默地强制分支指针指向另一个提交。这也假设您是唯一一个在 repo 上工作的人,和/或您知道自己在做什么。
提示:如果你做了 agit fetch并且你有新的提交origin/master,你可以移动master分支而无需签出使用:
git branch -f master origin/master
Run Code Online (Sandbox Code Playgroud)
这并不总是可能的。要创建合并提交,您必须执行合并操作。并且要进行合并操作,您应该在其他分支中提交不在当前分支中的提交。
如果你有在提交master分支,它是不是在dev分行,您可以:
免责声明:这只是一个概念验证,只是为了表明有时可以在不检查的情况下合并到另一个分支。如果您想每天使用它,您可能想使用 shell 重定向为其创建别名或为它创建一个 shell 脚本。再说一次,您还可以为问题中显示的较短过程制作一个 shell 脚本。
git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp
Run Code Online (Sandbox Code Playgroud)
解释:
合并master到临时分支并启动提交消息编辑器。如果您希望合并提交看起来像您已将dev分支合并到 中master,请从以下位置对其进行编辑:
Merge branch 'master' into temp
Run Code Online (Sandbox Code Playgroud)
对此:
Merge branch 'dev'
Run Code Online (Sandbox Code Playgroud)
提示:您可以使用-m "Merge branch 'dev'"而不是-e更快。
master分支指针以指向合并提交。dev分支。这仍然会触及您的工作树,但至少如此。它不会将树完全回滚到原始状态,master只是为了再次引入开发更改。有些人可能不在乎,但对其他人来说可能很重要。
| 归档时间: |
|
| 查看次数: |
80337 次 |
| 最近记录: |