我在一个有两个分支A和B的项目上工作.我通常在分支A上工作,并从分支B合并东西.对于合并,我通常会这样做:
git merge origin/branchB
Run Code Online (Sandbox Code Playgroud)
但是,我还想保留分支B的本地副本,因为我可能偶尔会检查分支而不先与我的分支A合并.为此,我会这样做:
git checkout branchB
git pull
git checkout branchA
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个命令中执行上述操作,而无需来回切换分支?我应该用git update-ref它吗?怎么样?
我有3个分支机构.
master [ Live Server]
\
stage [ Stage Server Where we test changes; merge commits ]
\
Dev [ Local Machine ]
Run Code Online (Sandbox Code Playgroud)
我想下游的变化.这些分支中的每一个都设置为相互跟踪.
通常,对于下游的更改,我这样做:
git checkout stage && git merge master
然后我结帐开发,我也这样做
git checkout dev && git merge stage
然后全部推动它们:
git push origin --all
有没有办法下游这些更改而不检查每个分支?
我可能使用了错误的术语.我不完全确定我是否正确使用上游/下游术语.
我们正在使用我们所有人都使用的单个远程存储库的模型.我们分支新功能并重新集成到主干分支.我们的工作流程是,当其他功能集成到主干中时,我们应该从主干集成到我们的工作分支.
因此,我们做的事情并不少见:
(branch) $ git commit -a -m"blah blah blah"
(branch) $ git fetch # origin/trunk is updated
(branch) $ git checkout trunk
(trunk) $ git pull # trunk is fast-forwarded to current version of origin/trunk.
(trunk) $ git checkout branch
(branch) $ git merge trunk
(branch) $ git push
Run Code Online (Sandbox Code Playgroud)
我不喜欢"git checkout trunk/git pull/git checkout branch"循环.它通常与Visual Studio合并,抱怨我的所有文件和项目都在磁盘上发生了变化,并且应该重新加载它们.两个结帐.而拉.合并.合并是不可避免的,但由于git如何工作,它应该能够在主干上进行快进,而不需要检查它.
但我不知道这个命令,而我的google-foo在这方面让我失望了.谁知道怎么样?
假设我有一个功能分支,在推送我的更改之前我将上游更改合并到其中:
git branch feature1
... [edit my code]
... [commit]
git fetch origin master
git merge fetch_head [or rebase]
... [resolve conflicts]
... [build and test code]
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望推动我的改变.这样做的正常方法是:
git checkout master [changes a bunch of working tree files]
git merge feature1 [changes the same files right back]
Run Code Online (Sandbox Code Playgroud)
这工作正常,但会使(日期检查)编译器认为一大堆文件是脏的,即使内容相同也需要重建.在这种情况下,有没有办法结帐并使工作树保持不变?
就像是:
git checkout master --merge-branch feature1
Run Code Online (Sandbox Code Playgroud)
编辑:
我只谈论快速合并,根据定义,它不会改变文件的状态.
我有以下场景:
* ab82147 (HEAD, topic) changes
* 8993636 changes
* 82f4426 changes
* 18be5a3 (master) first
Run Code Online (Sandbox Code Playgroud)
我想(非快进)合并topic成master.这需要我:
git checkout master git merge --no-ff topic但是检查master,然后将主题合并到它会导致git更改我的工作目录(虽然最终结果与检查master之前的结果相同),而我遇到的问题是由于我们项目的大小,构建它需要大约30分钟(使用IncrediBuild)虽然没有真正改变,但它简直无法忍受.
所以我想得到的是以下内容:
* 9075cf4 (HEAD, master) Merge branch 'topic'
|\
| * ab82147 (topic) changes
| * 8993636 changes
| * 82f4426 changes
|/
* 18be5a3 first
Run Code Online (Sandbox Code Playgroud)
没有真正触及工作目录(或至少以某种方式欺骗git).
我在树枝上a.我想将分支合并b到分支c.合并不是快进,但也不需要手动解决.(即,它不是简单的情况下,但它也不是最困难的,所以这是一个融合了Git是能够对自己做,而无需人.)
有没有办法让我做这个合并b从而c无需检查任何分支?怎么样?
更新:如果您知道可以执行的替代Git实现,那么这也是一个有效的解决方案.但编写一个以编程方式执行检查的脚本不是一个好的解决方案,因为它仍然需要我有一个干净的工作目录.
我需要能够拉到一个我可能不在的分支(实际上,为了论证而假设我不知道我在哪个分支).例如,我有一个origin带有分支的遥控器,该分支master由本地master使用跟踪分支以常规方式在本地跟踪.我可以提供的选项或参数git-pull与切换master,拉动,然后切换回我开始的任何分支具有相同的效果吗?
这里的许多答案表明这是不可能的,但是文档对<dst>under 的讨论<refspec>暗示了类似的东西
git pull origin master:master
Run Code Online (Sandbox Code Playgroud)
会做的.是这样吗?