好吧,我认为这是一个简单的git场景,我错过了什么?
我有一个master分支和一个feature分支.我做了一些工作master,一些工作,feature然后再做一些工作master.我最终得到这样的东西(词典顺序暗示了提交的顺序):
A--B--C------F--G (master)
\
D--E (feature)
Run Code Online (Sandbox Code Playgroud)
我没有问题要git push origin master保持远程master更新,也没有git push origin feature(当打开时feature)为我的feature工作维护远程备份.到目前为止,我们很好.
但现在我想在主人feature的F--G提交之上重新定义,所以我git checkout feature和git rebase master.还好.现在我们有:
A--B--C------F--G (master)
\
D'--E' (feature)
Run Code Online (Sandbox Code Playgroud)
问题:当我想要备份新的rebased feature分支时git push origin feature,推送被拒绝,因为树由于变基而发生了变化.这只能通过解决git push --force origin feature.
我讨厌使用--force而不确定我是否需要它.那么,我需要它吗?重新定位是否必然意味着下一个push应该是--force完美的?
这个功能分支不与任何其他开发者共享,所以我事实上 …
我试图了解它们之间的区别
git push -f
Run Code Online (Sandbox Code Playgroud)
和
git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)
我的猜测是,如果遥控器没有本地分支没有的提交,后者只会推送到遥控器?
如果有更好的方式来表达问题,lmk,但希望它很清楚.
我重新设置了分支的基础,该分支的效果是在我自己的基础上添加了一些提交。然后意识到我忘记了压缩一些提交,所以很难重新设置并压缩。现在,我需要把那些提交带回来。但是重新调配告诉我当前分支是最新的,即使不是。有没有办法解决这个问题?
编辑:
有两个分支:a和b。两者都是从master分支出来的。两者都是最新的大师。分支a有一些更改。我也希望分支b也有这些更改。我将分支a重新定位到b。最新的提交来自分支a。我的意图是在提交之前压扁这三个提交。我在最近一次提交之前硬重置为。然后我挤了。现在,我想以一种在将分支b合并到master时不会引起头痛的方式找回最新提交。
我已经尝试过reflog,git reset --hard HEAD@{n}但存在相同的问题:当前分支是最新的。
我正在从事一个 3 分支项目。
我在 branch1 上,并且有 master 分支。
当我需要从 master 拉取和合并某些东西时:
git checkout master
git pull origin master
git checkout branch1
git merge master
Run Code Online (Sandbox Code Playgroud)
有没有办法从我的分支中提取主更改,这样我就不需要合并了?
就像是:
git pull origin master
Run Code Online (Sandbox Code Playgroud)
但是从 branch1 没有切换到 master 分支。
编辑
恢复:
我有 3 个分支:每次 master 有新东西时,我都不想切换到分支 master。我想要的只是将 master 新功能拉入我的分支,而无需转到 master 分支。