13

我知道git pull会将工作分支更新到它跟踪的远程分支的尖端。因此,假设我这样做git pull,它将引入所有最新更改。就我而言,它将在我的树顶部引入 5 个更改。

有没有办法git pull只进行下一次更改?即,如果git pull将更改 03、04、05、06 和 07 放在我的树顶部,我如何只拉更改 03?在执行此命令时,我不知道它将引入的下一个更改的提交 ID。

我的树的尖端完全没有改变,不会有任何合并冲突等。

4

3 回答 3

16

也许是这样的?

git fetch
git merge <commit to merge>

要查找要合并的提交的 ID,请在运行 fetch 后在 gitk 中查找。

于 2012-04-10T22:56:25.953 回答
0

这在理论上应该是可能的。git status显示有 8 个提交要提取,如果脚本可以解析出“8”并输入(默认为 1)作为您想要的下一次提交的数量。你可以运行git-pull-next 2,它可以这样做:

  1. 以某种方式,检查有多少新提交(git status 有效)
  2. 设置为变量newCommits
  3. 还设置变量 ,pullNextNCommits等于 cli 输入,默认为 1
  4. 运行 git pull
  5. 运行 git 日志
  6. 获取之前的提交哈希newCommits,减去pullNextNCommits
  7. 存储变量current_git_branch作为结果git rev-parse --abbrev-ref HEAD
  8. git checkout <hash>
  9. 在本地删除 current_git_branch
  10. git checkout -b current_git_branch

多田!不是不可能!只需要写这个脚本...

这个答案是一个社区维基,请随意充实伪代码

可能有更好的方法来做到这一点 - 因为 git pull merge 可能有问题,最好从这里的第一个答案中获得灵感。但不知何故,以编程方式找到下一个提交哈希。

于 2019-04-10T15:54:00.037 回答
0

你可以。非常简单:

git fetch
git log --oneline --decorate --graph --all
git merge <some-commit-id>
#Repeat last line as often as you wish
#to incorporate upstream changes piecemeal.

标志的组合git log对于快速了解发生的事情非常有用,以至于我总是定义一个 shell 别名来使用这种精确的组合:

alias gitlog='git log --oneline --decorate --graph'

使用该别名,上述序列变为

git fetch
gitlog --all
git merge ...
...
于 2019-04-24T23:07:26.243 回答