只拉一个(最新推送的)提交

pull just one (the latest pushed) commit

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

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

现在我只想将提交编号 n+5 拉到开发服务器(不包括提交 n+1、n+2、n+3 和 n+4)。
我用谷歌搜索并找到了一些解决方案,包括 Whosebug 上的
我尝试了 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>...]'

我想尝试 (使用 git fetchgit merge)但是当它被说时我感到困惑

Note: git merge will get all the changes in and its ancestry, so this works if is the oldest non-merged commit.
I am afraid that this approach would include (pull/merge) all the commits that are before the commit n+5.

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

当然,要恰好获取一个提交:

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

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

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

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

git fetch
git merge --squash [commit#]

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

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

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

git fetch
git cherry-pick [commit#]