Issue
Assume:
The latest commit’s commit message of the branch feature/xyz
is add feature xyz
with SHA number 1234
. The newest commit’s SHA number of the main branch is 3456
.
When I push the branch feature/xyz
to the repo and open a pull request from feature/xyz
to main
a workflow pipeline will be triggered, how can I get the commit message add feature xyz
?
note: the pull request is open and not merged
name: Dev deploy
on:
pull_request:
types: [opened, reopened, edited, synchronize]
jobs:
deploy-to-dev:
name: deploy to dev
runs-on: ubuntu-22.04
steps:
- name: checkout repo
uses: actions/[email protected]
- name: Set env var
run: |
echo commit=$(git log --format=%B -n 1) >> $GITHUB_ENV
git log --format=%B -n 1
would give me something like Merge 1234 into 3456
.
How can I get the commit message of the last commit from the branch feature/xyz
, aka, add feature xyz
in this case?
Solution
Assuming the following: The main
branch contains commits "m1".."m5". The feature/xyz
branch contains commits "f1".."f2", starting from "m2", e.g.
$ git log --graph --all --oneline
* 4d5b4ee (feature/xyz) f2
* 62f9a15 f1
| * 6cf050a (HEAD -> main) m5
| * f9bd7c6 m4
| * b7860f8 m3
|/
* 39fee03 m2
* 1c1d702 m1
* e167ed6 .gitignore
$
then running
$ git checkout main
$ git merge feature/xyz
would create a merge commit, e.g.
$ git log --graph --all --oneline
* 7a8474a (HEAD -> main) Merge branch 'feature/xyz'
|\
| * 4d5b4ee (feature/xyz) f2
| * 62f9a15 f1
* | 6cf050a m5
...
A merge commit is a commit with two (or more) parents. You probably know that you can use ^
as a postfix to a branch/commit/ref to indicate its parent, but what when there are multiple? Just a single ^
is the same as the first parent which can be explicitly specified as ^1
and correspondingly ^2
refers to the second parent.
$ git rev-parse HEAD^
6cf050af75c8c71d441364906673690bb7f0b63d
$ git rev-parse HEAD^1
6cf050af75c8c71d441364906673690bb7f0b63d
$ git rev-parse HEAD^2
4d5b4ee433a8232300de0b62c97f613d2d812f6b
$
So what you are asking for sounds like the commit message for the second parent to the merge commit which you can get by running
git show -s --format=format:%s%n%n%b HEAD^2
when the current commit is the merge commit.
I think it is a really bad idea to depend on the last commit on a feature branch to be special and contain some extra valuable commit message so I would recommend against doing this. But the above is an answer to what was asked.
Answered By – hlovdal
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0