git - 我应该多久获取一次最新更改

git - How Frequent Should I Get Latest Changes

作为 git 新手,我了解基础知识,但我感到不安的一件事是,如果我的更改需要几天才能完成。

我会先创建一个新分支 branch-A 并开始工作,但我听说我应该每天从远程获取最新的代码更改,至少每天一次,以减少发生冲突的机会。

  1. 当我实际上仍在那个本地分支上仍在编码时,我应该多久将更改从远程获取到我的 branch-A
  2. 如果我在自己的本地 branch-A 连续几天编码,我应该每天 fetch/merge 到 brach-A 还是本地 master

更新

我想我不清楚我需要澄清什么。

假设我使用功能分支

假设团队规模中等,无论我们是否都在 "same" 区域工作,帮助我了解什么是安全的最佳实践。

话虽如此,我这样做是因为这是我所知道的(不确定什么是 rebase,正如我所说的,我是新手,但会阅读,好的):

获取最新更改并合并到开发中

git fetch origin
git merge origin/develop

从新更新的开发分支创建新分支

git checkout -b branch-A

今天工作、准备和提交

git add.
git commit -m "my message"

第二天,我想确保从远程获取所有更改以减少发生冲突的可能性。所以,我想再做一次 fetch/merge 但请注意,我目前在我的分支 A 上

我该怎么做?我这样做吗

git fetch origin
git merge origin/branch-A

或者像这样

git fetch origin
git merge origin/develop

这个问题完全取决于有多少人同时处理同一段代码。如果您正在开发一项新功能(即新文件),那么请花一个月时间并向上合并,而不要向下合并——无论如何您都不会发生冲突。如果你有三个编码员都试图修复同一个文件中的两打不同的错误,那么每 30 分钟合并一次。

不要着急或"uneasy"。我不认为三个连续的合并冲突比一个三倍大的合并冲突更容易。在许多情况下,连续的合并冲突最终只会一遍又一遍地改变相同的东西,如果每天在同一对 for 循环上有一堆琐碎的冲突,你会浪费更多的时间每天合并。

我绝对建议每日主拉。它让您清楚地看到所有已进行的更改,如果您在正在处理的文件上看到 +/- 的风暴,那么您最好合并,因为它可能是重构。如果只是对您的文件进行少量更改,请不要管它。

关于 1 - 这是您的决定 + 最适合您的团队的做法,同时考虑到同时对项目进行更改的人数以及有多少人正在应该像你一样工作"in the same area"。

根据经验,与主要开发分支的同步越少,您必须解决的冲突可能性就越大。

我可以说我几乎每天从主开发分支做一次变基,有时更频繁,但这又取决于我在上面解释的事情。

从技术上讲,如果分支是从 'master'(这是一个主要开发分支)中创建的,如下所示:

git checkout -b my_branch

然后你提交:

git commit -am "some commit"
git commit -am "another commit"

那么下面的事情就没有意义了:

git fetch --all
git rebase origin/master

在这种情况下,您的提交将在历史记录中 "last"(尽管它们的 sha1 会发生变化,这不是问题,因为它只是您的分支)并且您的分支也将包含来自 master 的最新更改。

关于 2

如果你是一个人/在一个非常小的团队中工作 - 那么你可能总是可以直接提交到 master 而根本不使用分支,尽管这不是推荐的使用方式 git。

我可以为自己说,我为单个功能使用功能分支,通常 "lives" 1-3 天。然后我通过 拉取请求 机制将它合并回 master - 我打开一个拉取请求,我的团队成员审查并批准我的更改,然后我合并回来。

这种工作方式有很多优点,但它超出了 git 提供的基本 "bare" 命令,更多的是关于使用 git 在项目中工作的良好实践 - 一个极其通用和灵活的工具。 所以我建议你阅读有关拉取请求的信息,看看你是否可以在你的团队中采用它们

回答

假设您目前在 branch-A:

易于理解

git commit -am "Make sure you save your pending changes" git checkout develop git pull # Or fetch merge like usual into develop git checkout branch-A # git merge origin/branch-A here if other people might also be working on branch-A. # It'll let you know that it's "Out of date" if other people changed branch-A git merge develop

这是更新分支的最清晰的方式。

易于输入

这仅在您没有更改本地开发和提取合并是一个简单的快进时才有效。如果您不能快进,它会通知您。

git commit -am "Make sure you save your pending changes" git fetch origin develop:develop # Updates your local develop # git fetch origin branch-A:branch-A # If others will be working on your branch. git merge develop

请注意,如果您忘记了此处的 git fetch origin branch-A:branch-A,它不会让您知道您已过时,因为 git fetch origin develop 只会获取开发。

给出建议

建议 1

git fetch origin git merge origin/branch-A

这个,实际上并没有做任何事情。 origin/branch-A 可能与您当地的分支机构 A 相同。如果其他人也在分支 A 上工作,那么你会接收他们的更新,这很酷。但是你从来没有接触过开发。

建议 2

git fetch origin # Make sure to git merge origin/branch-A here if other people are touching branch-A git merge origin/develop

这将通过使用 origin/develop 更新您的分支 A 就好了。 origin/develop 可能会在您不在的情况下进行更改,因此这将更新您的分支。

但是!这很令人困惑,因为您的本地开发仍然过时!你可以顺其自然,然后下次你签出 develop 时它会让你知道 "Out of date",此时你也可以 git 合并 origin/develop 到 develop 中。

但是,您可能会检查另一个分支,然后 git merge develop,思考 "Yeah I just updated"。但是你没有,本地开发不同步。这就是为什么这是一种不好的做法。