tou*_*anb 13 git workflow github git-merge kdiff3
是否可以使用Git选择性地将更改从一个分支应用到另一个分支?
更具体地说,我使用devGitHub 的公共分支和master部署的私有分支.当对一个分支进行更改时,它们将需要应用于另一个分支,但是某些代码行需要保持不同.在我的例子中,它是一些css类和一个feed.
我是Git的新手,但我做了我的研究:
git merge --no-commit --no-ff可以使用后跟a git mergetool来选择我想要的冲突.问题是它只适用于冲突Git无法自动合并,所以我想要保持不同的东西在我有机会使用我的mergetool之前被替换.
git difftool --cached 是有用的,因为它可以让我看到差异,但我需要复制我想要保留的内容并手动用文本编辑器替换它,因为我不能简单地选择和保存,就像我可以使用mergetool.
git cherry-pick似乎将指定的提交应用于另一个,但我希望保持不同的可能会分散到不同的提交,这些提交可能不仅包括我想要保持不同的内容.我不能看到这个工作,除非我做了数百万的提交会让我发疯.
另外要明确的是,我不希望一个分支成为另一个分支,合并的情况似乎如此.我想要两个独立的分支,各自的差异,并将变化从一个分支应用到另一个分支.
是否有更好的工作流程可以让我通过应用他们的更改并保持一些差异来保留开发和部署版本?我不介意使用单独的存储库或不同的工具,如果它导致解决方案.
tou*_*anb 12
我也发现了关于修补的问题:
要创建补丁: git diff dev > master.patch
申请: patch < master.patch
利用这样一个事实:创建 git 分支很便宜,并且不需要对工作目录的实际内容产生影响。
dev。创建一个临时分支。它将指向dev执行以下操作的相同提交:checkout -b for_master
据推测,您知道(或可以轻松找出)分支之前的哪个提交是您(部分)想要的更改之前的dev最后一个提交。在此示例中,假设该提交具有哈希值(“最后一个”,明白了吗?)。1457B4
将您的for_master分支重置为该提交:git reset 1457B4。(请勿使用开关--hard!)
现在,您有一个包含 中的所有更改的工作目录dev,但从for_master分支的 POV 来看,这些更改未暂存且未提交(而dev分支仍然指向记录所有更改的提交,因此工作仍然安全) 。
使用交互式暂存(git add -p和/或git add -e),创建一个提交(或多个,如果您愿意的话),其中包含且仅包含您想要应用于master分支的更改。
记下最后一次提交的哈希值(或给它一个标签)。在这个例子中,我会说它的哈希值是C0DA.
查看master。
精挑细选您刚刚所做的提交:git cherry-pick 1457B4..C0DA。
(请注意,仅在 git 版本 1.7.2 之后才可以选择范围。否则,您需要单独选择在步骤 4 中所做的所有提交。)
(另请注意,当您选择一个范围时,该范围的开始是实际选择的第一个范围之前的提交。)
这个过程有点类似于git checkout -p所选答案中提到的使用的逆过程。它对于在共享一些代码但也有很多差异的两个分支之间创建可提交可能很有用cherry-pick(例如,项目的两个主要版本之间),并且您不想花费大量时间忽略不相关的内容调用中的文件git checkout -p。
就我个人而言,我发现对同一存储库使用两个不同的工作树目录(一个用于源分支,一个用于目标)并在两个命令 shell 之间切换很方便,一个使用源分支目录(工作树),另一个使用目的地。但如果您不习惯使用该git worktree功能,那可能不适合您。
| 归档时间: |
|
| 查看次数: |
7955 次 |
| 最近记录: |