我在Git(bit bucket)中创建了一个分支。两个人正在修改同一个文件。一个人提交了该文件。其他人也在同一文件中进行本地更改。第二个人应该能够合并他的代码而不会丢失他的内容,而且早期的提交也应该是完整的。我搜索了很多选项,但可以找到明确的回复。请帮帮我。
答案 0 :(得分:1)
Git不会允许你(除非你--force
)将一组提交推送到远程分支,除非该远程分支的HEAD是该组提交的祖先。
换句话说,如果你推动,而另一个人推动你,那么另一个人的推动将失败,因为他们的提交不是你提交的后代。他们必须fetch
您的更改,rebase
他们的提交会在此更改之上(或merge
它,作为变基的替代方案)并且只有这样他们才能推动(前提是远程仓库在变装时没有变化更多。)
答案 1 :(得分:0)
是的,第二个人可以提交他的更改。但在提交之前,他必须pull
第一人的变化。如果存在合并冲突,则在提取更改后,第二个人必须修复这些冲突然后提交。提示:同时处理同一个文件不是一个好主意。几乎总是会产生冲突。
答案 2 :(得分:0)
嗯,你的问题与git提供者使用的无关(github,bitbucket,codebase等)
您的案例的可能工作流程如下。
有两位开发人员, Alice 和 Bob 。两者都使用下一个内容修改了parameters.yml
文件。
# parameters.yml
database_user: 'root'
database_password: 'root'
Alice 添加了一个参数来打开/关闭缓存。
# parameters.yml
database_user: 'root'
database_password: 'root'
cache: true
Bob 添加其他参数以打开/关闭应用中的调试模式。
# parameters.yml
database_user: 'root'
database_password: 'root'
debug: false
Alice 将她的更改推送到super-cache
分支。之后, Bob 也将他的更改推送到super-cache
分支。然而他的推动失败是因为,正如@PSkocik所说, Bob 的提交不是 Alice 提交的后代。
Bob 必须在推送提交之前获取 Alise 的提交。他选择使用rebase git pull --rebase origin/super-cache
Bob 将在parameters.yml
中发生冲突。解决冲突后的文件将是
# parameters.yml
database_user: 'root'
database_password: 'root'
debug: false
cache: true
现在, Bob 可以继续与git rebase --continue
在此之后, Bob 拥有super-cache
分支的所有提交以及他的提交。
最后, Bob 可以推送他的提交。
您可以看到:Git rebase of Atlassian