我有两个目标,在处理我的功能时我需要一个工作流来实现它们(master是一个企业github仓库)。
目标:
让我的分支机构保持最新状态
能够看到我使用git diff
和git show
我是github的新手,但我尝试了很少的方案来实现这一点,但他们没有帮助我。
最初,我创建了一个新的分支(跟踪origin / master)并进行了代码更改。
我提交更改并使用git push origin
将此更改发布到github。
然后我创建公关并让人们评论。
我得到了很好的反馈,我进行了代码更改并在第一次提交之前提交。
如何保持我的分支与origin / master同步?
我尝试通过git pull
合并来更新我的本地分支。没关系,但现在如果我做git show
我将看不到我的更改,我会看到最新的主提交。
我尝试通过git pull --rebase
重新定位来更新我的本地分支。我可以使用git show
来查看我的更改,但我的本地和远程分支不同步,我必须使用git push origin -f
更新我的github PR并进行第二次更改。
我愿意接受建议,谢谢!
答案 0 :(得分:1)
你正在做的是正确的方法。 pull
和pull --rebase
之间存在很大差异。它会git fetch && git merge origin/master
resp。 git fetch && git rebase origin/master
。他们两个都是正确的方法。不同之处在于树历史,在大多数情况下,它的公司政策应该使用什么。
使用rebase,您将始终更改历史记录,并需要强制推送。使用merge,您不会更改历史记录,但最后一次提交是合并。
不要指望你只有一个会被推送的提交,所以diff不应该仅用于一次提交而是用于整个分支。如果您只需要查看差异,则可以运行:
git show HEAD~1
或 git show HEAD~4..HEAD~1
查看除最后一个(合并)之外的最后几次提交中的所有更改。
或者你可以试试这样的东西
git diff --boundary HEAD~1..origin/master
P.S。当更多人在同一个分支上工作时,rebase和force push会非常危险。只有当您确定自己是唯一一个在分支机构工作的人时才强制推动。
评论也可能存在一些问题。不确定Github如何,但Gitlab不会在强制推送后显示完全更改或删除行的注释。