【问题标题】:pull just one (the latest pushed) commit只拉一个(最新推送的)提交
【发布时间】:2020-03-11 21:44:06
【问题描述】:

我一直在处理我的本地存储库并多次推送到 git 服务器,而我部署我的工作的服务器仍然落后于所有这些提交。
很快,情况是这样的:

local: commit n+5
git server: commit n+5
dev server: commit n  

现在我只想将提交号 n+5 拉到开发服务器(不包括提交 n+1、n+2、n+3 和 n+4)。
我在 Google 上搜索并找到了一些解决方案,包括 Stackoverflow 上的 this one
我试过git reset --hard <commit>,但没用,我收到了这个错误:

git status 
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
git reset --hard 77de3a5
fatal: ambiguous argument '77de3a5': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

我想试试the other proposed solution(使用git fetchgit merge),但听到它时我很困惑

注意: git merge 将获取所有更改及其祖先, 因此,如果是最旧的非合并提交,则此方法有效。
恐怕这种方法会包括(拉/合并)提交 n+5 之前的所有提交。

有没有办法只提取一个提交(不包括以前的提交)?
PS:我知道最干净的方法是使用不同的分支,但是当你得到有点乱!

【问题讨论】:

  • 我认为您应该阅读 git cherry-pick 的全部内容。 git help cherry-pick
  • @eftshift0 我试过git cherry-pick -n 77de3a5,也没用,我得到:fatal: bad revision '77de3a5'
  • 拉取最后一次提交将自动将您的文件与迄今为止所做的所有更改对齐
  • 我猜你给樱桃挑选提供了错误的修订 ID。检查您正在使用的 id。 git show --summary 77de3a5 显示什么?
  • 您可能必须在部署服务器上执行git fetch --all 才能从远程获取新信息。然后你可以重试樱桃挑选。

标签: git git-pull pull


【解决方案1】:

当然,要获取一个提交:

git fetch [remote] [branch/commit] --depth=1

然后可以将隔离的提交引用为 FETCH_HEAD。我在更新浅子模块时经常这样做,但在其他情况下,隔离的无历史提交可能没有用。

至于 reset --hard 错误,失败是因为你没有执行 git fetch 并且服务器还不知道 77de3a5 存在。

如果您只是想保持开发服务器历史记录更干净,您可能想要:

git fetch
git merge --squash [commit#]

或者,如果您想避免意外引入多余的合并提交:

git fetch
git merge --ff-only [commit#]

最后,如果你只想要那一次提交引入的更改

git fetch
git cherry-pick [commit#]

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-05-08
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多