Update new-branch.ps1

This commit is contained in:
Markus Fleschutz 2024-02-22 09:53:55 +01:00
parent 5381e88ced
commit 8b5cbd074f

View File

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