通常这就是我将代码合并推送到主的方式
方法1:
git pull origin master
git add -A
git commit -m 'message'
git push
后来发现拉不是有线性历史的正确方法,我应该重新调整基础,然后推
我目前在做什么
方法2:
git checkout LocalBranch
git rebase master[resolve conflicts]
git add -A
git commit -m 'message'
git push
问题:
当我用方法1做事时,它说已经是最新的了如果我使用方法2,它会引发很多冲突,并且在解决后,我无法推送代码。
问题:
- 为什么
git pull master(5abc)
和git rebase master(4def)
指向不同的master头版本 git pull
和git rebase
在任何时候都不会到达同一版本的master
我认为您需要清楚git pull
的工作。从远程(即(提取代码的位置(可以是GitHub、GitLab、BitBucket等(会导致git变为git fetch
和git merge
。那是什么意思?
这意味着它首先获取您的代码和远程代码之间的差异(例如,假设远程上有两个"额外"提交(,然后尝试将这些差异合并到代码库中。现在,如果这两个提交与您在代码上进行的提交无关(比如创建一个新文件(,这可以顺利进行。但是,如果代码的同一部分发生了更改,那么假设您的代码是:
int a = 4;
bool x = false;
但合并想要成功:
int a = 5;
bool x = false;
这会产生合并冲突,因为您的代码说a
是4,但合并说它是5,git应该考虑哪一个?因此,您在提取代码时会得到merge conflict
的提示。您需要手动解决这些问题才能使事情正常运行。
git rebase master
可帮助您将LocalBranch
中的提交重新应用到master上。这意味着它占用您的工作树,并试图将其与主工作树融合。有关此过程的详细分析,请参见此。回扣意味着,无论您做出了什么提交,所有提交都将应用于master之上(如果您愿意,甚至可能介于两者之间;(。请观看此视频以获得更好的想法。由于这个过程是一个循序渐进的过程,它会让你进入一个不同的提交(首先要重新确定的提交(。
git pull
(特别是merge
步骤(将进行"差异"提交,并尝试将其merge
放入主工作树中。只有在完成此过程后,才能进行add
和commit
,最后进行push
此外,我想给你一个提示,使用交互式rebase,即git rebase -i
来进行rebase,因为它为你提供了一个交互式界面来帮助你重新base。
如果还有任何困惑,请随时发表评论!:(
最佳
PS:在rebase
的情况下,您可以进行强制推送,以便能够将更改推送到遥控器上。
方法1具有线性历史的正确替代方案是:
git add -A
git commit -m message
git fetch origin
git rebase origin/master [resolve conflicts]
git push