【问题标题】:Can I add changes to staging area from another branch?我可以从另一个分支添加对暂存区的更改吗?
【发布时间】:2016-11-05 19:06:19
【问题描述】:

我有两个分支,

  • 主人
  • 新功能

新功能有一个我想添加到主控的提交,但我想控制我想合并多少。

我想要为每一行添加/拒绝更改的选项。我可以用git add -p 做类似的事情

我搜索了很多,可能我搜索了错误的术语。这似乎是很明显的任务。

【问题讨论】:

  • 工作目录中只有一个暂存区,不是每个分支都有一个。
  • @choroba:实际上,只有一个标准暂存区(又名“the”索引),但是您可以使用环境变量GIT_INDEX_FILE定义自己的临时索引.对于此特定任务,这不是一件有用的事情。 :-) 但不幸的是,为了解释git commit -a 的一些奇怪的角落并使用--only--include 提交,这是一个需要知道的事情。
  • @torek 您可以在一个本地存储库中拥有多个工作目录,每个目录都有自己的索引。所以你们都是对的:P
  • @poke:他说一个“在工作目录中”(当我谈论git worktree add 时,每个工作树是我所说的)。但是,例如,git commit file.ext 当您暂存了file.ext不同 版本时,会在提交工作树版本后清除暂存版本,原因是它会复制将标准索引添加到临时索引,将file.ext 的工作树版本添加到临时索引,提交,然后将新提交的file.ext 从临时索引复制回 到标准指数。 (我认为这是一个错误。)
  • 查看这种临时索引行为的另一种方法是在编辑器中暂停使用git commit -agit commit file.ext 等进行提交时使用git status

标签: git shell version-control dvcs


【解决方案1】:

git cherry-pick-n|--no-commit 选项一起使用,然后以交互方式选择要提交的内容:

git 樱桃挑选

...

-n, --no-commit

通常git cherry-pick 会自动创建一系列提交。这 标志应用必要的更改来挑选每个命名的提交到您的 工作树和索引,无需进行任何提交。此外,当 使用此选项时,您的索引不必匹配 HEAD 提交。这 cherry-pick 是针对索引的开始状态完成的。

当挑选多个提交对索引的影响时,这很有用 连续。

所以命令顺序如下:

git cherry-pick -n <commitid>  # merge commitid into the index and working-tree
git reset                      # clear the index
git add -p                     # selectively add merged changes to the index

或者,您可以使用git reset -p 从暂存区删除不需要的帅哥:

git cherry-pick -n <commitid>  # merge commitid into the index and working-tree
git reset -p   # interactively remove from the index changes brought by commitid

【讨论】:

  • 谢谢,它成功了。我之前尝试过cherry-pick,但我没有使用-n 标志。感谢您的帮助!
【解决方案2】:

我认为你可以尝试使用补丁文件。
创建补丁文件运行:

git checkout master
git diff ..new-features > patch.diff

在文件 patch.diff 中,您的分支 master 和 new-features 之间存在差异。
现在你可以应用补丁文件了,运行:

git apply patch.diff

现在您可以以任何所需的方式管理您的更改。

【讨论】:

  • @Leon 是的,我的意思是补丁。谢谢你!这个错字我已经改正了。
猜你喜欢
  • 2013-06-12
  • 2014-02-28
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多