diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000000..74a4dedce1f
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.sh text eol=lf
diff --git a/MERGE_ELEMENT.md b/MERGE_ELEMENT.md
index 23ccfe044b0..778f88504f9 100644
--- a/MERGE_ELEMENT.md
+++ b/MERGE_ELEMENT.md
@@ -1,54 +1,84 @@
# Merge upstream `element-web` into `master`
-Pre-requisites
-- Review [element-web releases](https://github.com/element-hq/element-web/releases)
-- Sync fork [elecordapp/matrix-js-sdk](https://github.com/elecordapp/matrix-js-sdk)
+## Pre-requisites
----
+1. Review changes in [element-web releases](https://github.com/element-hq/element-web/releases)
-1. Create a branch named 'element-v1.xx.xx'
+1. Review any changes to the app's [config.json file](https://github.com/element-hq/element-web/blob/master/element.io/app/config.json)
+
+1. Sync js-sdk fork [elecordapp/matrix-js-sdk](https://github.com/elecordapp/matrix-js-sdk)
+
+ > [!NOTE]
+ > Create a [backup branch](https://github.com/elecordapp/matrix-js-sdk/branches) before syncing the upstream
+
+## Merge
+
+1. Create a new branch named `element-v1.xx.xx`
+
+ > [!IMPORTANT]
+ > Run `gitrm.sh` to ensure elecord hasn't added back any upstream files
1. Merge the upstream master branch
- > On GitHub desktop:
- > - Select 'Choose a branch to merge into element-v1.xx.xx'
- > - Select 'upstream/master'
- > - Select 'Create a merge commit'
+ > [!TIP]
+ > Using GitHub Desktop
+ > - Select `Choose a branch to merge into element-v1.xx.xx`
+ > - Select `upstream/master`
+ > - Select `Create a merge commit`
1. Resolve merge conflicts
- > Use branch file
+ > [!IMPORTANT]
+ > Run `gitrm.sh` to discount previously removed upstream files
+
+ > [!TIP]
+ > Always use the branch file for...
> - CHANGELOG.md
> - README.md
-
- > Use upstream/master
+ >
+ >
+ > Always use the upstream file for...
> - yarn.lock
- > Run gitrm.sh
- > `git rm --cached -r docs\config.md`
- > `git rm --cached -r playwright`
+ > [!WARNING]
+ > Don't use the `package.json` branch file, instead resolve merge conflicts as there might be unseen changes
+
+1. Complete the merge process
- > Do not use the `package.json` branch file, resolve merge conflicts as there might be unseen changes
+## Review
1. Check for any new files added or unwanted changes
-1. Run the build locally
+ > [!NOTE]
+ > You can amend the merge commit as needed
+
+1. Build the app locally and test
-1. Commit the yarn lock 'chore: update yarn.lock'
+1. Commit the yarn.lock file `chore: update yarn.lock`
+ > [!WARNING]
> Only include additions, no local paths or minified package locks
1. Commit any required regression fixes
- > Note, any commits made to this branch won't be included in the changelog
+ > [!NOTE]
+ > Any commits made to this branch won't be included in the changelog
1. Publish the branch
-1. Create a pull request ('Element v1.XX.XX')
+## Pull Request
+
+1. Create a pull request named `Element v1.xx.xx`
+
+ > Merge upstream Element-web v1.11.xx-yy.
+ > - Bundles new feature A
+ > - Adds important feature B
1. Test the app
1. Merge (don’t squash)
-> [!IMPORTANT]
-> elecord-desktop will also need to be updated
+
+
+> [!CAUTION]
+> `elecord-desktop` will also need to be updated, simply repeat these steps
diff --git a/scripts/gitrm.sh b/scripts/gitrm.sh
new file mode 100644
index 00000000000..926ea38f635
--- /dev/null
+++ b/scripts/gitrm.sh
@@ -0,0 +1,124 @@
+git rm --cached -r test/
+git rm --cached -r playwright/
+git rm --cached -r element.io/
+git rm --cached -r docs/
+git rm --cached -r docker/
+git rm --cached -r debian/
+git rm --cached -r mocks/
+git rm --cached -r .husky/
+git rm --cached sonar-project.properties
+git rm --cached playwright.config.ts
+git rm --cached jest.config.ts
+git rm --cached Dockerfile
+git rm --cached CONTRIBUTING.md
+git rm --cached config.sample.json
+git rm --cached code_style.md
+git rm --cached build_config.sample.yaml
+git rm --cached book.toml
+git rm --cached AUTHORS.rst
+git rm --cached .dockerignore
+git rm --cached .github/CODEOWNERS
+git rm --cached .github/FUNDING.yml
+git rm --cached .github/PULL_REQUEST_TEMPLATE.md
+git rm --cached .github/labels.yml
+git rm --cached .github/release-drafter.yml
+git rm --cached .github/renovate.json
+git rm --cached -r .github/actions/
+git rm --cached -r .github/ISSUE_TEMPLATE/
+git rm --cached .github/workflows/backport.yml
+git rm --cached .github/workflows/build_debian.yaml
+git rm --cached .github/workflows/build_develop.yml
+git rm --cached .github/workflows/deploy.yml
+git rm --cached .github/workflows/docker.yaml
+git rm --cached .github/workflows/docs.yml
+git rm --cached .github/workflows/end-to-end-tests-netlify.yaml
+git rm --cached .github/workflows/end-to-end-tests.yaml
+git rm --cached .github/workflows/issue_closed.yml
+git rm --cached .github/workflows/localazy_download.yaml
+git rm --cached .github/workflows/localazy_upload.yaml
+git rm --cached .github/workflows/netlify.yaml
+git rm --cached .github/workflows/pending-reviews.yaml
+git rm --cached .github/workflows/playwright-image-updates.yaml
+git rm --cached .github/workflows/pull_request.yaml
+git rm --cached .github/workflows/pull_request_base_branch.yaml
+git rm --cached .github/workflows/release-drafter.yml
+git rm --cached .github/workflows/release-gitflow.yml
+git rm --cached .github/workflows/release.yml
+git rm --cached .github/workflows/release_prepare.yml
+git rm --cached .github/workflows/sonarqube.yml
+git rm --cached .github/workflows/static_analysis.yaml
+git rm --cached .github/workflows/sync-labels.yml
+git rm --cached .github/workflows/tests.yml
+git rm --cached .github/workflows/triage-assigned.yml
+git rm --cached .github/workflows/triage-incoming.yml
+git rm --cached .github/workflows/triage-labelled.yml
+git rm --cached .github/workflows/triage-move-review-requests.yml
+git rm --cached .github/workflows/triage-stale.yml
+git rm --cached .github/workflows/triage-unlabelled.yml
+git rm --cached .github/workflows/update-jitsi.yml
+git rm --cached .github/workflows/update-topics.yaml
+git rm --cached -r __mocks__/
+git rm --cached knip.ts
+git rm --cached developer_guide.md
+rm -rf test/
+rm -rf playwright/
+rm -rf element.io/
+rm -rf docs/
+rm -rf docker/
+rm -rf debian/
+rm -rf mocks/
+rm -rf .husky/
+rm sonar-project.properties
+rm playwright.config.ts
+rm jest.config.ts
+rm Dockerfile
+rm CONTRIBUTING.md
+rm config.sample.json
+rm code_style.md
+rm build_config.sample.yaml
+rm book.toml
+rm AUTHORS.rst
+rm .dockerignore
+rm .github/CODEOWNERS
+rm .github/FUNDING.yml
+rm .github/PULL_REQUEST_TEMPLATE.md
+rm .github/labels.yml
+rm .github/release-drafter.yml
+rm .github/renovate.json
+rm -rf .github/actions/
+rm -rf .github/ISSUE_TEMPLATE/
+rm .github/workflows/backport.yml
+rm .github/workflows/build_debian.yaml
+rm .github/workflows/build_develop.yml
+rm .github/workflows/deploy.yml
+rm .github/workflows/docker.yaml
+rm .github/workflows/docs.yml
+rm .github/workflows/end-to-end-tests-netlify.yaml
+rm .github/workflows/end-to-end-tests.yaml
+rm .github/workflows/issue_closed.yml
+rm .github/workflows/localazy_download.yaml
+rm .github/workflows/localazy_upload.yaml
+rm .github/workflows/netlify.yaml
+rm .github/workflows/pending-rfeviews.yaml
+rm .github/workflows/playwright-image-updates.yaml
+rm .github/workflows/pull_request.yaml
+rm .github/workflows/pull_request_base_branch.yaml
+rm .github/workflows/release-drafter.yml
+rm .github/workflows/release-gitflow.yml
+rm .github/workflows/release.yml
+rm .github/workflows/release_prepare.yml
+rm .github/workflows/sonarqube.yml
+rm .github/workflows/static_analysis.yaml
+rm .github/workflows/sync-labels.yml
+rm .github/workflows/tests.yml
+rm .github/workflows/triage-assigned.yml
+rm .github/workflows/triage-incoming.yml
+rm .github/workflows/triage-labelled.yml
+rm .github/workflows/triage-move-rfeview-rfequests.yml
+rm .github/workflows/triage-stale.yml
+rm .github/workflows/triage-unlabelled.yml
+rm .github/workflows/update-jitsi.yml
+rm .github/workflows/update-topics.yaml
+rm -rf __mocks__/
+rm knip.ts
+rm developer_guide.md