我有两个分支.提交a是一个头,而其他有b,c,d,e和f之上a.我想移动c,d,e和f第一支没有提交b.使用樱桃挑选很容易:结帐第一个分支樱桃 - 一个接一个c地挑选f第二个分支到第一个.但有没有办法挑选所有c- f一个命令?
这是场景的直观描述(感谢JJD):

例如,在下面的主分支中,我需要删除提交af5c7bf16e6f04321f966b4231371b21475bc4da,这是由于之前的rebase导致的第二个:
commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Tue Apr 12 23:50:15 2011 +0200
add generic config/initializers/omniauth.example.rb
commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Fri Apr 22 00:15:50 2011 +0200
show github user info if logged
commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Fri Apr 22 17:20:48 2011 +0200
add multiple .container at blueprint layout
commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Thu Apr 21 19:55:57 2011 +0200
add %h1 Fantastic Logo + .right for 'Sign …Run Code Online (Sandbox Code Playgroud) 我有两个分支:A和B.
A的承诺历史:a <- b <- c;B的承诺历史:a <- h <- i;假设这里只有一个文件.
b,我添加了一些像"foo"这样的文本.c,我添加了一些像"bar"这样的文本.git cherry-pick c在B分支上.我以为cherry-pick只会选择c分支的变化B.但是,它会添加foo和bar分支B.这显然不是我想要的.因此,cherry-pick将从c祖先提交后选择提交中触及的那些文件的所有更改a.是对的吗?如果我只想要什么,从挑DIFF b到c并应用到i?
添加文件test.txt并发出第一个提交init commit.test.txt就是现在:
first line
second line
Run Code Online (Sandbox Code Playgroud)创建一个新分支dev但留在分支机构master; …
我正在尝试迁移到GitFlow工作流程,我想重写存储库的历史记录,以便所有这些都符合新的存储库.
目前它看起来像这样:
Master: A - B - C - D - E - F - - - - - - - - - L
\ /
Release: \ J - K
\ / \
Development: G - H - I M
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
Master: A - - - - - - - - - - - - - - - - - - - L
\ /
Release: \ J - K
\ / \
Development: B - C - D …Run Code Online (Sandbox Code Playgroud) 鉴于我有 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) 正如我在这里所关注的那样,我在另一个本地分支中有旧提交[包含abc.cpp,def.cpp].
几个月后我想要使用这些更改,但在我目前的分支中,abc.cpp已升级.那么如果我挑选那么它会将旧的abc.cpp的变化整合到新的abc.cpp [最近的工作目录副本]中吗?
假设我有樱桃采摘提交comm1从master branch成branch foo.是否会comm1从branch master成功的樱桃选择中删除提交,否则它将被复制到branch foo?
在Git中,我可以使用交互式的基础来重写历史记录,这很棒,因为在我的功能分支中,我探索了不同的重构和完成方式时,使用部分有效的代码进行了大量提交。
在将分支重新合并或合并到master之前,我想将很多提交压缩在一起。
一些按从上到下的顺序排列提交
1. Initial commit on feature branch "Automatic coffee maker UI"
2. Add hot chocolate as product
3. Add tea as product. Products are now generic
4. Create in memory data store for adapter tests
5. Cry because I can't get entity framework to create a composite key. Integration tests broken.
6. Implemented composite key!!
7. All tests green and feature done!
Run Code Online (Sandbox Code Playgroud)
假设我要保留提交3、4和7。
使用变基我想“压扁”提交
理想情况下,我会在交互式基础中执行
1. squash
2. squash
3. pick (contains the work …Run Code Online (Sandbox Code Playgroud) 我有三个功能分支:F1, F2,F3
他们都提出了 Pull Request 并合并到Development分支中。
现在我只想将分支中的两个功能 ( F1& F3)合并Development到Release分支中。
有什么建议么?
我猜 git 樱桃采摘是有效的,但不知道如何进行。
请提出任何其他替代方案,或者解释一下选择是否符合我的要求。
不小心我在我的主分支上合并了分支,但我不得不恢复更改。我想创建一个新分支并选择我必须还原的所有更改。
你们中的任何人都知道如何使用我的所有预览提交创建分支?
我会非常感谢你的帮助
问题也可能是"为什么在git pull存在时使用git fetch?".
执行a的原因git fetch可能是您希望在运行之前查看fetch命令的日志以了解您将要合并的内容git merge.
git fetch那么git merge作为经典的工作流程,git fetch如果你以前没有运行过这个命令,你还有其他常见的东西吗?
我看到有之间的连接rebase和cherry-pick一系列的提交。
我没有找到任何文章/教程来解释当一个人尝试cherry-pick多次提交时究竟发生了什么。
一些问题(我能想到的)是:
CHERRY_PICK_HEAD参考?git cherry-pick 2^..4,git 执行的操作序列是什么以及git 使用的提交之间diff究竟是什么?git cherry-pick 1..8,git 会做什么?作为标题,git cherry-pick origin/master意味着什么?这条指令如何运作?
从远程更新当前本地主分支(即从远程获取数据并与本地文件合并)时,我们可以使用以下选项:
git pull origin mastergit fetch origin master; git merge origin/mastergit fetch origin master; git rebase origin/mastergit fetch origin master; git cherry-pick origin/master但我无法理解git cherry-pick origin/master,也无法找到解释.
如果有人可以提供帮助,请先谢谢.
注意:我很好奇以下事情...当我git fetch origin master; git cherry-pick origin/master用来尝试从远程更新当前的本地主分支时,此操作会比较先前的提交并将不同的部分作为已修改的文件,因此我可以使用一个提交来包含这些修改部分.它是如何工作的?
git ×13
git-rebase ×3
cherry-pick ×2
github ×2
git-commit ×1
git-reset ×1
git-revert ×1
git-squash ×1
gitlab ×1
squash ×1