git - 只拉一个(最新推送的)提交
问题描述
我一直在处理我的本地存储库并多次推送到 git 服务器,而我部署我的工作的服务器仍然落后于所有这些提交。
很快,情况是这样的:
local: commit n+5
git server: commit n+5
dev server: commit n
现在我只想将提交号 n+5 拉到开发服务器(不包括提交 n+1、n+2、n+3 和 n+4)。
我用谷歌搜索并找到了一些解决方案,包括Stackoverflow 上的这个。
我试过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 fetch
and git merge
)但是当它被说出来时我感到困惑
注意: git merge 将获取所有更改及其祖先,因此如果是最旧的非合并提交,则此方法有效。
恐怕这种方法会包括(拉/合并)提交 n+5 之前的所有提交。
有没有办法只拉一次提交(不包括以前的提交)?
PS:我知道最干净的方法是使用不同的分支,但是当你有点乱的时候怎么办!
解决方案
当然,要获取一个提交:
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#]
推荐阅读
- google-maps - 自定义 Flutter Google Map 中的中心位置按钮
- python - BeautifulSoup 或请求不阅读网页的某些部分
- laravel - Laravel 5 在检索事件之前
- json - 作为 Json 反序列化
- gitlab - 如何设置 Slack 频道以直接链接到 GitLab 问题和合并请求?
- javascript - NgForm 的属性“有效”在 HTML 中为假,但在组件中为真
- android - 我们如何以编程方式控制辅助显示器中的屏幕方向?
- c# - 将 xaml 用于 xamarin forns 项目时出现错误,并且在呈现控件时出现异常
- r - “点图”相对于具有标准偏差的平均值
- matlab - 实验数据的数值积分