git - "Proper" pull git "production branch"到生产服务器的方法

标签 git github git-pull git-remote

我对 Git 很陌生,已经阅读了 Pro Git 书@ http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging .我的问题是我今天所做的是否是使用生产服务器和远程 Git 存储库的首选方式。

我将我的存储库托管在 GitHub 上,使用三个远程分支:开发 -> 测试 -> 主控。

每当'testing'分支被证实工作时,我在本地git merge'master'和'testing'(快进?),并且git push 'master' 到 GitHub。

在生产服务器(/opt/www/url.com/)上我做了:

git init
git remote add origin https://github.com/.....
git pull origin master

现在每次我想更新 master 时,我都会发出 git pull

git pull origin master

生产环境永远不会将任何更改推送到远程。并且不会发生局部变化。我做的对吗?如果不是,将更新 pull 入生产的首选方式是什么?

编辑#1:我不想管理我现在面临的生产服务器上的任何冲突(不知何故我做错了什么)。我只是想 pull 下最新更新的 master 分支,然后切换到它。

最佳答案

为此,执行“git pull”非常普通,但还有一种更可靠的方法。

如果您不以某种方式进行本地更改,则不会有任何冲突。但是,如果您只想获得一个最新的树,并消除任何本地更改,那么有一个更好的方法,它会忽略任何本地内容:

首先,您需要从服务器获取最新的。为此,我们将使用:

而不是“git pull”
git fetch origin master

这是“git pull”的前半部分。 (第二个是 merge 到你的本地 master,这是你遇到问题的地方)。

Git fetch 可以:

  1. 找到远程上的 commit master 指向的内容
  2. 下载您在本地没有的提交及其引用的所有内容。
  3. 更新 origin/master ref 以指向该提交,以记住远程在其“master”版本上的位置。

接下来,我们将简单地更新本地“master”以指向同一个提交,并更新我们的工作树。

为此,我们将使用:

git reset --hard origin/master

(假设您没有为远程存储库使用不同的名称,而不是默认的“来源”——如果您这样做,请相应地进行调整)。

这实际上做了三件事:

  1. 更新您的本地 master 分支以指向您刚从远程获取的同一提交。
  2. 将该树加载到您的索引中
  3. 更新您的工作树以匹配索引。

您现在有一个与远程匹配的本地主分支和树。

但是还有一个步骤,那就是清理任何遗留的东西,git 不会跟踪这些东西。

git clean -fdx

将删除之前构建创建的所有文件并为您提供一个干净的环境。在任何情况下,您都应该将要保留的任何构建工件复制到其他位置。

“git pull”旨在帮助开发人员协调他们的工作,因此它确实不是这项工作的理想工具。 “git fetch”和“git reset --hard”更具体,没有防止意外覆盖本地工作的保护措施。

但这正是您想要的。

不过,如果您有时进行更改以修复生产服务器上的问题,您可能希望继续使用“git pull”。 merge 和可能的冲突可能利大于弊。

但有时您只是希望将可靠的更新作为自动化的一部分,而任何本地更改都是需要消除的问题。

但您可能想要“git clean”,即使是“git pull”也是如此。遗留文件可能会以神秘且难以识别的方式搞砸构建和部署。

关于git - "Proper" pull git "production branch"到生产服务器的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13135601/

相关文章:

git - git pull 和 git fetch + git rebase 有什么区别?

git - merge 基于另一个功能分支的功能分支

git - 如果这些笔记的提交被压扁,有没有办法自动 merge 笔记?

android - 无法使用Jitpack编译 fork 的Github Repo

git - 使用恢复到上次 git pull --rebase state 之前的状态

Git - pull 时忽略目录,推送时不忽略目录

eclipse - 如何在 Eclipse 工具栏中显示当前的 git 分支

Gitlab 删除旧提交

github - 使用私有(private) github 进行 Teleport 社区身份验证

android - 将来自 github 操作的 Artifact 添加到发布