在 GIT 中更新后恢复先前分支的更改
Restore changes from previous branch after updates in GIT
我对 git 有点困惑,所以我创建了一个玩具示例,它可以让我了解如何解决我的问题。假设我有一个存储库,其中一个文件 requirements.txt
如下所示:
# requirements.txt
A
B
C
D
假设我在一个新分支中添加了两行代码:
git checkout -b newbranch
git add .
git commit -m "B2 B3"
git checkout master
git merge newbranch
# requirements.txt
A
B
B2
B3
C
D
但随后协作历史在 master 中继续,其他人创建新内容,添加、更新或删除其他文件等。从远程仓库中拉取 master 后,我的 master 上的需求文件如下所示(我之前的更改被新提交删除,还有 C ):
# requirements.txt
A
B
C1
C2
D
E
现在我想恢复在 newbranch
中添加的 B1 和 B2 行,但不删除其他人在 master 上所做的。也就是说,我想要的输出是:
Whatever GitMagicCommands to do this??:
# requirements.txt:
A
B
B2
B3
C1
C2
D
E
我可以使用哪些 Git 命令以最佳方式完成该任务(我假设可能存在冲突)?
一个pickaxe search可以帮助:git log -SB2
会给你:
- 引入 B2 的提交 C1
- 并且,供您参考,删除 B2 的提交 C2。
然后您可以 git cherry-pick C1
,假设它只修改了一个文件:
git cherry-pick C1
如果没有,你可以cherry-pick only one file out of C1, using git show
/git apply
。
git show "C1" -- requirements.txt | git apply --index -
我对 git 有点困惑,所以我创建了一个玩具示例,它可以让我了解如何解决我的问题。假设我有一个存储库,其中一个文件 requirements.txt
如下所示:
# requirements.txt
A
B
C
D
假设我在一个新分支中添加了两行代码:
git checkout -b newbranch
git add .
git commit -m "B2 B3"
git checkout master
git merge newbranch
# requirements.txt
A
B
B2
B3
C
D
但随后协作历史在 master 中继续,其他人创建新内容,添加、更新或删除其他文件等。从远程仓库中拉取 master 后,我的 master 上的需求文件如下所示(我之前的更改被新提交删除,还有 C ):
# requirements.txt
A
B
C1
C2
D
E
现在我想恢复在 newbranch
中添加的 B1 和 B2 行,但不删除其他人在 master 上所做的。也就是说,我想要的输出是:
Whatever GitMagicCommands to do this??:
# requirements.txt:
A
B
B2
B3
C1
C2
D
E
我可以使用哪些 Git 命令以最佳方式完成该任务(我假设可能存在冲突)?
一个pickaxe search可以帮助:git log -SB2
会给你:
- 引入 B2 的提交 C1
- 并且,供您参考,删除 B2 的提交 C2。
然后您可以 git cherry-pick C1
,假设它只修改了一个文件:
git cherry-pick C1
如果没有,你可以cherry-pick only one file out of C1, using git show
/git apply
。
git show "C1" -- requirements.txt | git apply --index -