提问人:NulisDefo 提问时间:2/10/2020 最后编辑:NulisDefo 更新时间:2/11/2020 访问量:509
Git(可能)冲突解决工作流
git (possible) conflict resolution workflow
问:
我正在尝试确定正确的 git 工作流程。有几个问题让我感到困惑。
您正在开发功能分支。一旦你提交了,你应该:
1)拉动功能分支(如果您是唯一一个从事该分支的人,则可选)。
2)从master合并(或更好的是变基)并解决冲突(如果有的话)。
3)结账大师。
4) 从远程主站拉取。
5)合并功能分支(如果一切顺利,这应该会导致快进)。
6) 推送到遥控器。
正如我所提到的,有些事情不适合我。
第 2 步假设 master 是最新的,不是吗?
如果不是(第 4 步实际上进行了一些更改),那又如何?是否应该返回功能分支并重复步骤 2?
我不确定从哪里来,但我有一个概念,所有合并(或变基)冲突都应该在功能分支中解决。这是对的吗?如果是这样,为什么?
如果 3 为真,那么我是否应该转到 master,拉取(以确保我有最新的 master),返回功能分支并进行合并/变基(又名包含额外步骤以确保 master 处于最新状态)?
编辑1:
例如,一个场景:
您完成了功能分支的工作,并希望将这些更改放在 master 上。您目前位于本地功能分支中。本地主服务器上没有任何变化,因为您已经开始在功能分支上工作。但是,远程主服务器有一些变化。应该如何处理这种情况?
答:
假设有多个人同时在存储库上工作,并且远程源代码管理 (SCM) 是 GitHub。 您应该为您的工作创建一个拉取请求(这在其他 SCM 提供商中也称为合并请求)。
然后,这应该由项目的另一个成员审查并合并。如果存在冲突,它不会允许您合并 PR。然后,您需要在远程 SCM 上或本地解决,具体取决于 SCM 提供商。
如果您必须在本地重新定位。您可以采取两种方法。master
- 你上面提到的方法。切换分支并执行变基的位置
- 您可以使用 Git 的功能来拉取远程上存在的所有分支。
git fetch
使用第二种方法可以避免切换分支,但仍然具有与第一种方法相同的效果。
使用第二种方法时,需要运行:
git fetch
以拉动遥控器上的所有更改。这将更新存储库的索引。origin
git rebase origin/master
.由于我们只使用 fist 命令更新了索引,因此您需要说您要从 ;因此origin
origin
origin/master
下面是一个示例
在这里发展
是你的主人
- 更新索引以匹配远程
origin
users:() ➜ (10/02 22:52) ~/dummy git:(feature/rebase-test) ✗ git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:praveenprem/dummy
5029e07..429a6e6 develop -> origin/develop
- 使用更新的索引而不是本地索引进行变基。
origin/develop
develop
users:() ➜ (10/02 22:52) ~/dummy git:(feature/rebase-test) ✗ git rebase origin/develop
First, rewinding head to replay your work on top of it...
Fast-forwarded feature/rebase-test to origin/develop.
users:() ➜ (10/02 22:53) ~/dummy git:(feature/rebase-test) ✗ git add .
users:() ➜ (10/02 22:53) ~/dummy git:(feature/rebase-test) ✗ git commit
[feature/rebase-test 9cb6ad0] Add test file 3
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test-3.txt
users:() ➜ (10/02 22:54) ~/dummy git:(feature/rebase-test) git flow feature finish rebase-test
Switched to branch 'develop'
Your branch is behind 'origin/develop' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
Merge made by the 'recursive' strategy.
test-2.txt | 1 +
test-3.txt | 0
2 files changed, 1 insertion(+)
create mode 100644 test-2.txt
create mode 100644 test-3.txt
Deleted branch feature/rebase-test (was 9cb6ad0).
Summary of actions:
- The feature branch 'feature/rebase-test' was merged into 'develop'
- Feature branch 'feature/rebase-test' has been removed
- You are now on branch 'develop'
users:() ➜ (10/02 22:54) ~/dummy git:(develop) git pull
Already up to date.
users:() ➜ (10/02 22:55) ~/dummy git:(develop) git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 1.77 KiB | 452.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:praveenprem/dummy.git
429a6e6..ae38b95 develop -> develop
您可能注意到,当我合并 brach 时,它告诉我我的分支在 1 个提交的后面。但是,当合并在推送合并之前执行 at 时,没有要拉取的更改。develop
git pull
希望这对您的用例有所帮助。
评论
develop
add->commit
git flow feature finish rebase-test
feature/rebase-test
git fetch --all
release-test
git commit -m
git flow feature finish
feature
feature/
release-test
feature/release-test
git fetch
--all
git flow release finish 0.0.0
下一个:将多维数组减少 1 的算法复杂度
评论