Git 维护历史简化
Git Maintaining history Streamlined
我从 Master 那里拿了一个分支(Branch A),并在 Branch A 上做了一些提交,同时,一些 Commit 从另一个 Branch B 合并到 Master 上
问题是:我必须推送我的提交并合并到 Master
那么哪种方法最好:
1)我将我的提交推送到远程分支 A,然后检出 master,然后进行拉取,然后将分支 A 合并到 master 中,并将合并后的代码推送到 Master 中。
2) 我签出 master,git 拉取 master,然后签出分支 A 并将我的提交推送到分支 A,然后签出 Master 并将分支 A 合并到 Master 中并推送 Master。
推送branchA
到远程:
$ git push origin branchA
签到 master
,用 remote master
更新 master
。将 branchA
拉入 master
,然后推送到远程:
$ git checkout master # master branch
$ git pull origin master # update local master history = remote master history
$ git pull origin branchA # pull 'branchA' changes into 'master' branch
$ git push origin master # update remote master with branchA changes
假设您在纯 git 环境中工作(即没有像 Github 的 "pull requests" 之类的 "external" 工作流管理,则两者都不需要那个)。
简单地在本地合并你的分支,然后推送你想要远程的两个分支(即,推送 branchA
仅当你想保留该分支 long-term 时才需要,并且也希望可以远程查看它的后验性)。
git checkout master
git pull origin master # just in case someone else changed it meanwhile...
git merge branchA
git push origin master branchA
解释:
首先,您结账 master
。这意味着您的本地 "current" 分支是 master
,工作目录代表其当前文件树。
接下来,您从 origin
拉取 master
。如果其他人同时向远程主机提交了一些东西,这将很有用;这意味着您现在是最新的。如果您知道没有人可以做到这一点(因为您是唯一一个致力于此的人),那么您可以跳过这一步。
第三,您将 branchA
合并到本地 master
。我假设您拥有 branchA
,也就是说,不可能在 origin
上有更新的 branchA
,因此没有进一步的 push/pull 是必要的。
最后,您将 master
和 branchA
都推回到 origin
。远程(和您的本地)master
现在将包含合并提交,其中包括源自 branchA
的所有更改。 branchA
将保持不变并保留用于历史目的或进一步更改。
变基与合并
有些人从不变基,但总是合并。其他人喜欢变基。
你评论说你知道区别,那我就不多写了。但是对于这个特定的用例(将更改从功能分支返回到 master
),合并是正确的操作,不应该涉及 rebase
。
如果您问如何将更改从 master
恢复到 branchA
, 那么 我们会讨论您是否会使用 rebase
或 merge
.
我从 Master 那里拿了一个分支(Branch A),并在 Branch A 上做了一些提交,同时,一些 Commit 从另一个 Branch B 合并到 Master 上 问题是:我必须推送我的提交并合并到 Master 那么哪种方法最好:
1)我将我的提交推送到远程分支 A,然后检出 master,然后进行拉取,然后将分支 A 合并到 master 中,并将合并后的代码推送到 Master 中。
2) 我签出 master,git 拉取 master,然后签出分支 A 并将我的提交推送到分支 A,然后签出 Master 并将分支 A 合并到 Master 中并推送 Master。
推送branchA
到远程:
$ git push origin branchA
签到 master
,用 remote master
更新 master
。将 branchA
拉入 master
,然后推送到远程:
$ git checkout master # master branch
$ git pull origin master # update local master history = remote master history
$ git pull origin branchA # pull 'branchA' changes into 'master' branch
$ git push origin master # update remote master with branchA changes
假设您在纯 git 环境中工作(即没有像 Github 的 "pull requests" 之类的 "external" 工作流管理,则两者都不需要那个)。
简单地在本地合并你的分支,然后推送你想要远程的两个分支(即,推送 branchA
仅当你想保留该分支 long-term 时才需要,并且也希望可以远程查看它的后验性)。
git checkout master
git pull origin master # just in case someone else changed it meanwhile...
git merge branchA
git push origin master branchA
解释:
首先,您结账 master
。这意味着您的本地 "current" 分支是 master
,工作目录代表其当前文件树。
接下来,您从 origin
拉取 master
。如果其他人同时向远程主机提交了一些东西,这将很有用;这意味着您现在是最新的。如果您知道没有人可以做到这一点(因为您是唯一一个致力于此的人),那么您可以跳过这一步。
第三,您将 branchA
合并到本地 master
。我假设您拥有 branchA
,也就是说,不可能在 origin
上有更新的 branchA
,因此没有进一步的 push/pull 是必要的。
最后,您将 master
和 branchA
都推回到 origin
。远程(和您的本地)master
现在将包含合并提交,其中包括源自 branchA
的所有更改。 branchA
将保持不变并保留用于历史目的或进一步更改。
变基与合并
有些人从不变基,但总是合并。其他人喜欢变基。
你评论说你知道区别,那我就不多写了。但是对于这个特定的用例(将更改从功能分支返回到 master
),合并是正确的操作,不应该涉及 rebase
。
如果您问如何将更改从 master
恢复到 branchA
, 那么 我们会讨论您是否会使用 rebase
或 merge
.