在合并我的同事的提交时我犯了一些错误.现在,我们已经发现了它,我们需要再次应用旧提交,手动选择文件中的更改.情况如下:
A--\ /--F--\
C--D--E H--I
B--/^ \--G--/ ^
| |
WRONG MERGE MASTER
Run Code Online (Sandbox Code Playgroud)
我需要git再次问我将B与我合并,就像B从未在历史上那样.换句话说,我需要git让我为B和I提交的所有文件选择合并.做这种事的最佳方法是什么?我可以用樱桃酱来实现吗?怎么样?
我正在尝试进行一些更改,但我不想在这个分支中提交它们,我只想在本地拥有它们。
为此,我正在使用
git cherry-pick <hash> --no-commit
Run Code Online (Sandbox Code Playgroud)
但是,这会自动将它们添加到舞台,然后,我必须使用手动重置它们
git reset HEAD <files>
Run Code Online (Sandbox Code Playgroud)
git 没有选项可以让cherry pick 不提交,也不添加到索引中吗?
就像是:
git cherry-pick <hash> --no-commit --no-stage
Run Code Online (Sandbox Code Playgroud)
我知道这个技巧会做我想要的,但我必须在提交中指定所有文件:
编辑
也试过这个,但它也被添加到索引中。
git checkout hash -- <list of files>
Run Code Online (Sandbox Code Playgroud)
而这些文件,可能不会共享相同的公共路径。我正在尝试使其自动化
我们已经使用git-flow了一段时间来开发软件框架.我们在一个存储库中有master和development分支.
最近,不同的客户开始对购买框架感兴趣,这需要为每个客户定制框架.
到目前为止,我们feature-customerXYZ从主服务器为每个客户分支了一个新分支,在那里进行了自定义并在自定义完成后保持分支打开(这可以防止产品master/ development分支的"感染" 来自定制).
与此相对应,在框架本身的发展继续使用该产品通常混帐流工作流程master,development,features,hotfixes和release分支机构.
在这种情况下发生了两种常见的情况,我认为我们的工作流程无法以最佳方式处理:
feature-customerXYZ分支的开发可以包含值得在产品master/ development分支中实现的提交.由于feature-customerXYZ分支永远不会被关闭,因此这些提交必须是rebased或者cherrypicked是产品分支,这需要在定制之后进行额外的工作并且容易出错.
在feature-customer分支打开时发现的修补程序git-flow通过将hotfix修复后的已打开分支仅合并到产品master和development分支来处理,但不会合并到打开的feature-customer分支中(更准确地说:它们不会合并到所有打开的feature分支中).
是否有一个git工作流可以简洁地处理这个?是否有一个聪明的替代,而不是merge,cherrypick或rebase的提交到产品master/ develop或开feature分店,分别?
我仍然发现git revert的行为有些令人困惑。显著的痛苦和误会之后,我才知道混帐复归否定特定承诺,而不是恢复到 那个承诺。到目前为止,我还没有使用过git cherry-pick。
您能否详细说明这两个git命令中的每一个?您何时以及如何更喜欢使用它们?
我尝试合并两个repos,产生一个平坦的(也就是交错的)历史.我按照"历史记录重写:"下的/sf/answers/1038775741/这样做.
要合并的两个分支是"master"和"src/master".然后,我写道:
$ git checkout --orphan new-master
$ git cherry-pick 9d325d6d 3f4c52ba
error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed
$ git cherry-pick 9d325d6d && git cherry-pick 3f4c52ba
[new-master 10f0277] Initial revision.
7 files changed, 194 insertions(+)
create mode 100644 __init__.py
create mode 100644 manage.py
create mode 100644 samples/__init__.py
create mode 100644 samples/models.py
create mode 100644 samples/views.py
create mode 100644 settings.py
create mode 100644 urls.py …Run Code Online (Sandbox Code Playgroud) 编辑:我添加了一些我认为不必要的信息,但事实并非如此.我有两个分支,A和B.在A中进行三次提交后更改了file.c我想将它们挑选到B中,还有一个在A~1中更改的file.h
> git cherry-pick A~2
Success
> git cherry-pick A~1
error: could not apply 81e0723...
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
> git status
You are currently cherry-picking commit 81e0723.
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: some/unrelated/file.txt
both modified: file.c
Run Code Online (Sandbox Code Playgroud)
现在,在查看某些/不相关的/ file.txt时,它包含对中间某处的file.h的更改.所以这看起来像是git中的一个bug.所以我现在将手动撤消一些/不相关/ file.txt的更改并将它们添加到file.h.
我们有一个开发分支,它是我们的主人和一个单独的维护分支.当我修复bug时,我经常需要从主服务器到维护服务器进行提交,反之亦然.通常我通过执行以下程序来实现这一目标......
我遇到的问题是因为分支已经变得非常不同我每次切换时都需要重建整个项目,这需要花费10分钟.这是预期的,但我不想这样做,因为我经常在分支机构之间切换.所以为了避免这种情况,我创建了第二个工作目录,以便为每个分支创建一个目录.这个问题是我无法将原始的主提交选择到维护目录中,直到我将该提交从远程提取到维护目录的主分支.当我这样做时,我必须完全重建.
有没有办法将提交拉入我的维护目录的主分支而不切换?或者,有更好的方法完全这样做吗?我们最近从CVS切换到Git,所以我对它并不熟悉.
我有两个文件调用vvn.c,aqu.c
我做了更改vvn.c,我有我的git提交.如何樱桃选择相同的变化aqu.c
唯一的区别是API.
vvn.c 包含API作为 vvn_function_names()
而aqu.c包含API的unions_function_names()
我不知道该怎么做.我知道樱桃采摘到同一个文件.有没有办法做到这一点?
在实际执行任何操作之前,有什么方法可以显示“gitcherry-pick”将应用的更改吗?
我希望看到“git diff”类型的更改列表,这些更改将由命令完成,而无需实际进行更改或修改任何内容。
鉴于我有 3 个提交
c1
+ print("A")
c2
+ print("B")
c3
+ print("C")
Run Code Online (Sandbox Code Playgroud)
然后我在 c1 结帐了一个新分支。
git checkout -b br c1
Run Code Online (Sandbox Code Playgroud)
然后我挑选c3。
git cherry-pick c3.
Run Code Online (Sandbox Code Playgroud)
我想要的是文件有
print("A")
print("C")
Run Code Online (Sandbox Code Playgroud)
-- 我只选择 c3,c3 只需添加一行 print("C")
但事实是我遇到了冲突,结果是
print("A")
++<<<<<<< HEAD
++=======
+ print("B")
+ print("C")
++>>>>>>> f1383aa... C
Run Code Online (Sandbox Code Playgroud)
我的问题是: 1.为什么会发生冲突?2.如果我想要print("A")和print("C")怎么办?
我也尝试过即使我
git diff C^1 .. C > 1.patch
git apply 1.patch
Run Code Online (Sandbox Code Playgroud)
我有
zhifan@zhifandeMacBook-Pro ~/g/demo> git apply 1.patch
error: patch failed: 1.py:1
error: 1.py: patch does not apply
Run Code Online (Sandbox Code Playgroud) git ×10
git-cherry-pick ×10
cherry-pick ×5
branch ×1
git-flow ×1
git-merge ×1
git-rebase ×1
git-revert ×1
merge ×1