You can allow contributors with push access to your repository to merge their pull requests with different merge options or enforce a specific merge method for all of your repository's pull requests.
You can configure pull request merge options to meet your workflow needs and preferences for managing Git history. For more information, see Configuring pull request merges. You can enforce one type of merge method, such as commit squashing or rebasing, by only enabling the desired method for your repository.
Note
When using the merge queue, you no longer get to choose the merge method, as this is controlled by the queue. For more information about merge queues, see Managing a merge queue.
Merge methods set on the repository that conflict with the merge method rule will prevent merging. For example if you do not allow rebase merging for the repository, and the merge rule only allows rebase on a branch, that merge will not be possible. For more information, see Available rules for rulesets.
When you click the default Merge pull request option on a pull request, all commits from the feature branch are added to the base branch in a merge commit. The pull request is merged using the --no-ff
option.
To merge pull requests, you must have write permissions in the repository.
The default merge method creates a merge commit. You can prevent anyone from pushing merge commits to a protected branch by enforcing a linear commit history. For more information, see About protected branches.
Squashing your merge commitsWhen you select the Squash and merge option on a pull request, the pull request's commits are squashed into a single commit. Instead of seeing all of a contributor's individual commits from a topic branch, the commits are combined into one commit and merged into the default branch. Pull requests with squashed commits are merged using the fast-forward option.
To squash and merge pull requests, you must have write permissions in the repository, and the repository must allow squash merging.
You can use squash and merge to create a more streamlined Git history in your repository. Work-in-progress commits are helpful when working on a feature branch, but they aren’t necessarily important to retain in the Git history. If you squash these commits into one commit when merging to the default branch, the changes are consolidated, leading to a clear Git history.
Before enabling squashing commits, consider these disadvantages:
git rerere
may not be as effective.For more information, see Configuring commit squashing for pull requests.
Rebasing and merging your commitsWhen you select the Rebase and merge option on a pull request, all commits from the topic branch (or head branch) are added onto the base branch individually without a merge commit. In that way, the rebase and merge behavior resembles a fast-forward merge by maintaining a linear project history. However, rebasing achieves this by re-writing the commit history on the base branch with new commits.
The rebase and merge behavior on GitHub deviates slightly from git rebase
. Rebase and merge on GitHub will always update the committer information and create new commit SHAs, whereas git rebase
outside of GitHub does not change the committer information when the rebase happens on top of an ancestor commit. For more information about git rebase
, see git-rebase in the Git documentation.
To rebase and merge pull requests, you must have write permissions in the repository, and the repository must allow rebase merging.
For a visual representation of git rebase
, see The "Git Branching - Rebasing" chapter from the Pro Git book.
Before enabling commit rebasing, consider these disadvantages:
Repository contributors may have to rebase on the command line, resolve any conflicts, and force push their changes to the pull request's topic branch (or remote head branch) before they can use the rebase and merge option on GitHub. Force pushing must be done carefully so contributors don't overwrite work that others have based their work on. To learn more about when the Rebase and merge option is disabled on GitHub and the workflow to re-enable it, see About pull request merges.
When using the Rebase and Merge option on a pull request, it's important to note that the commits in the head branch are added to the base branch without commit signature verification. When you use this option, GitHub creates a modified commit, using the data and content of the original commit. This means that GitHub didn't truly create this commit, and can't therefore sign it as a generic system user. GitHub doesn't have access to the committer's private signing keys, so it can't sign the commit on the user's behalf.
A workaround for this is to rebase and merge locally, and then push the changes to the pull request's base branch.
For more information, see Configuring commit rebasing for pull requests.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4