Updated new-branch.ps1

This commit is contained in:
Markus Fleschutz 2025-06-25 13:21:49 +02:00
parent f823dffeba
commit d29697c7a1

View File

@ -5,24 +5,24 @@
This PowerShell script creates a new branch in a local Git repository and switches to it. This PowerShell script creates a new branch in a local Git repository and switches to it.
.PARAMETER newBranch .PARAMETER newBranch
Specifies the new Git branch name Specifies the new Git branch name
.PARAMETER pathToRepo .PARAMETER path
Specifies the file path to the local Git repository (current working directory per default) Specifies the file path to the local Git repository (current working directory by default)
.EXAMPLE .EXAMPLE
PS> ./new-branch.ps1 test123 PS> ./new-branch.ps1 feature123
(1/6) Searching for Git executable... git version 2.45.0 (1/6) Searching for Git executable... git version 2.45.0
(2/6) Checking local repository... C:\Repos\rust (2/6) Checking local repository... C:\Repos\rust
(3/6) Fetching remote updates... git@github.org:rust/rust.git (3/6) Fetching remote updates... git@github.org:rust/rust.git
(4/6) Creating new branch... (4/6) Creating new branch...
(5/6) Pushing updates... (5/6) Pushing updates...
(6/6) Updating submodules... (6/6) Updating submodules...
Created branch 'test123' based on 'main' in 📂rust repo in 18s. Repo 'rust' now on new 'feature123' branch (based on 'main', took 18s).
.LINK .LINK
https://github.com/fleschutz/PowerShell https://github.com/fleschutz/PowerShell
.NOTES .NOTES
Author: Markus Fleschutz | License: CC0 Author: Markus Fleschutz | License: CC0
#> #>
param([string]$newBranch = "", [string]$pathToRepo = "$PWD") param([string]$newBranch = "", [string]$path = "$PWD")
try { try {
if ($newBranch -eq "") { $newBranch = Read-Host "Enter the new Git branch name" } if ($newBranch -eq "") { $newBranch = Read-Host "Enter the new Git branch name" }
@ -33,38 +33,38 @@ try {
& git --version & git --version
if ($lastExitCode -ne 0) { throw "Can't execute 'git' - make sure Git is installed and available" } if ($lastExitCode -ne 0) { throw "Can't execute 'git' - make sure Git is installed and available" }
Write-Host "⏳ (2/6) Checking local repository... $pathToRepo" Write-Host "⏳ (2/6) Checking local repository... $path"
if (-not(Test-Path "$pathToRepo" -pathType container)) { throw "Can't access repo folder: $pathToRepo" } if (-not(Test-Path "$path" -pathType container)) { throw "Can't access repo folder: $path" }
$result = (git -C "$pathToRepo" status) $result = (git -C "$path" status)
if ($lastExitCode -ne 0) { throw "'git status' in $pathToRepo failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git status' in $path failed with exit code $lastExitCode" }
$repoName = (Get-Item "$pathToRepo").Name $repoName = (Get-Item "$path").Name
Write-Host "⏳ (3/6) Fetching remote updates... " -noNewline Write-Host "⏳ (3/6) Fetching remote updates... " -noNewline
& git -C "$pathToRepo" remote get-url origin & git -C "$path" remote get-url origin
if ($lastExitCode -ne 0) { throw "'git remote get-url origin' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git remote get-url origin' failed with exit code $lastExitCode" }
& git -C "$pathToRepo" fetch --all --recurse-submodules --prune --prune-tags --force & git -C "$path" fetch --all --recurse-submodules --prune --prune-tags --force
if ($lastExitCode -ne 0) { throw "'git fetch' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git fetch' failed with exit code $lastExitCode" }
$currentBranch = (git -C "$pathToRepo" rev-parse --abbrev-ref HEAD) $currentBranch = (git -C "$path" rev-parse --abbrev-ref HEAD)
if ($lastExitCode -ne 0) { throw "'git rev-parse' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git rev-parse' failed with exit code $lastExitCode" }
"⏳ (4/6) Creating new branch..." "⏳ (4/6) Creating new branch..."
& git -C "$pathToRepo" checkout -b "$newBranch" & git -C "$path" checkout -b "$newBranch"
if ($lastExitCode -ne 0) { throw "'git checkout -b $newBranch' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git checkout -b $newBranch' failed with exit code $lastExitCode" }
"⏳ (5/6) Pushing updates..." "⏳ (5/6) Pushing updates..."
& git -C "$pathToRepo" push origin "$newBranch" & git -C "$path" push origin "$newBranch"
if ($lastExitCode -ne 0) { throw "'git push origin $newBranch' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git push origin $newBranch' failed with exit code $lastExitCode" }
"⏳ (6/6) Updating submodules..." "⏳ (6/6) Updating submodules..."
& git -C "$pathToRepo" submodule update --init --recursive & git -C "$path" submodule update --init --recursive
if ($lastExitCode -ne 0) { throw "'git submodule update' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git submodule update' failed with exit code $lastExitCode" }
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds [int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"Created branch '$newBranch' based on '$currentBranch' in 📂$repoName repo in $($elapsed)s." "Repo '$repoName' now on new '$newBranch' branch (based on '$currentBranch', took $($elapsed)s)."
exit 0 # success exit 0 # success
} catch { } catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" "⚠️ ERROR: $($Error[0]) in script line $($_.InvocationInfo.ScriptLineNumber)"
exit 1 exit 1
} }