避免在git

时间:2015-11-28 01:53:10

标签: git github

所以,我想创建一个只包含对file1,file2和file3的更改的拉取请求(即功能的更新)。

我使用的工作流程:

git clone https://github.com/eghm/project.git project-eghm-clean
cd project-eghm-clean
git remote add upstream https://github.com/forkeduser/project.git
git fetch upstream
git merge upstream/master
git push
git branch featurebranch
git checkout featurebranch
#edit files: file1, file2, file3
git add file1
git add file2
git add file3
git commit -m 'updates for feature'
git push --set-upstream origin featurebranch

然后在github上,我进入了我的分叉存储库,选择了Branch:featurebranch,然后单击了Pull请求。该请求包括我同步我的合并:

pull request includes sync merges

将来如何避免这种情况?

3 个答案:

答案 0 :(得分:1)

对于您发出拉取请求的分支,您应该git rebase。例如:

git rebase origin/master

由于这将改变分支的历史记录,因此最好在新分支中执行此rebase。所以:

git checkout -b new_rebased_branch
git rebase origin/master

为了将来参考,如果您不想在pull请求中进行合并提交,则应尝试通过rebase更新分支而不是合并。同样,我总是建议检查一个单独的分支来执行此操作,因为重定位将更改您的提交历史记录,您可能希望保留原始提交历史记录的备份。

答案 1 :(得分:1)

正如@mkrufky指出的那样,你应该使用git rebase将你的工作重新定位到主分支上。但是,没有必要创建一个新的分支,因为rebase并没有真正重写历史,而是#34;重放"承诺到新基地。 Git甚至会在git reflog中跟踪所有旧提交一段时间,这可以防止您以这种方式丢失历史记录。

正确的工作流程是:

git fetch origin master
git rebase origin/master

但是,这正是git pull --rebase所做的!这是一个选项,可以将您的工作重新定位到您要反对的分支上,而不是将两个分支合并。

您可以在此处找到更多解释:Difference between git pull and git pull --rebase以及git手册的重新版本章节:https://git-scm.com/book/en/v2/Git-Branching-Rebasing

答案 2 :(得分:1)

Dec. 4th 2019起,您可以通过启用Require linear history来尝试保护您的PR分支并拒绝包含合并提交的任何推送。

这将确保您被迫使用git pull --rebase,因为否则,您将无法进行推送。