<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nowshin Alam Owishi</title>
    <description>The latest articles on DEV Community by Nowshin Alam Owishi (@owishiboo).</description>
    <link>https://dev.to/owishiboo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1184833%2F26caaddc-42cd-4a08-87f4-88622a091c3a.png</url>
      <title>DEV Community: Nowshin Alam Owishi</title>
      <link>https://dev.to/owishiboo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/owishiboo"/>
    <language>en</language>
    <item>
      <title>Watch Out for Cherry-Pick</title>
      <dc:creator>Nowshin Alam Owishi</dc:creator>
      <pubDate>Sat, 09 Aug 2025 13:56:42 +0000</pubDate>
      <link>https://dev.to/owishiboo/watch-out-for-cherry-pick-18ak</link>
      <guid>https://dev.to/owishiboo/watch-out-for-cherry-pick-18ak</guid>
      <description>&lt;p&gt;It’s a bit of a read, but spending a few minutes now could save you hours of pain later.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is cherry-pick 🍒?
&lt;/h2&gt;

&lt;p&gt;In many situations, you might want to copy specific code changes from one branch into another. Git offers a command for this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git cherry-pick &amp;lt;commit-hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command copies the content of a specific commit (by hash) and applies it to your current branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep in mind&lt;/strong&gt;: Git applies &lt;em&gt;only the changes from the commit, not the commit itself&lt;/em&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applies the &lt;strong&gt;commit's diff&lt;/strong&gt; as a new disconnected change&lt;/li&gt;
&lt;li&gt;Creates duplicate commits with  a different SHA hash&lt;/li&gt;
&lt;li&gt;Maintains no relationship to the original commit&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to use it?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;When you are working and testing on your branch and want to reuse one commit in other branches without merging everything.&lt;/li&gt;
&lt;li&gt;In case of emergency fixes. Like, introducing a hotfix to a previous release.&lt;/li&gt;
&lt;li&gt;You need a specific functionality from a branch that is not fully ready to merge yet.&lt;/li&gt;
&lt;li&gt;Need to revive specific commits from a branch that won't be merged anymore.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cherry-pick is a powerful tool, but it’s not a one-size-fits-all fix. While it can be convenient, it must be used with caution. This doesn’t mean cherry-picking is inherently bad or should be avoided completely, but it does carry risks. Often, issues arise not from the tool itself, but from how it’s used. These mistakes are common, which is why understanding them is crucial. I will address some of the potential risks of cherry-picking and how to dodge them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Dangers of Git Cherry-Picking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Situation 1: Merge Hell
&lt;/h3&gt;

&lt;p&gt;Imagine you're working on the &lt;code&gt;feature/dashboard&lt;/code&gt; branch. Halfway through, you discover a critical API bug that needs to be fixed for your upcoming feature. On the other hand, your teammate, Ahmed, is already fixing it in his &lt;code&gt;bugfix/api&lt;/code&gt; branch with other issues, but he needs a couple of days to complete all the fixes.&lt;/p&gt;

&lt;h4&gt;
  
  
  What You Do
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Ahmed provides the fix you need with a commit. Later, he tells you to cherry-pick that commit. So, let's say the hash is F and you cherry-pick using the specific commit hash: &lt;code&gt;git cherry-pick F&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The fix works! You continue developing your dashboard.
Currently, the situation is like the image below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5i23ztiwh6yeac8j1l1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5i23ztiwh6yeac8j1l1y.png" alt="Situation 1 before merge" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A week later, Ahmed merges his entire &lt;code&gt;bugfix/api&lt;/code&gt; branch to &lt;code&gt;main&lt;/code&gt;. Remember, &lt;strong&gt;it also has the commit that you cherry-picked earlier&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Surprise
&lt;/h4&gt;

&lt;p&gt;Later, you find &lt;strong&gt;conflicts of identical changes&lt;/strong&gt; while trying to merge your dashboard. Depending on the changes of the commits, it can be complex.&lt;/p&gt;

&lt;h4&gt;
  
  
  What Git sees
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The original fix (from Ahmed's merge)&lt;/li&gt;
&lt;li&gt;Your cherry-picked version (same changes, different commit hash)&lt;/li&gt;
&lt;li&gt;Treats them as conflicting changes
Now it hurts because you're forced to manually resolve conflicts that shouldn't exist, wasting hours on what should have been a clean merge. The situation can be described as in the image below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3pur2ktm6jm0qpejkhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3pur2ktm6jm0qpejkhj.png" alt="Situation 1 with merge conflict" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Situation 2: Disappearing Changes
&lt;/h3&gt;

&lt;p&gt;Now, imagine you're fixing a security issue with login notifications, in your &lt;code&gt;bugfix/login&lt;/code&gt; branch. You need to disable the feature temporarily while you fix the underlying problem.&lt;/p&gt;

&lt;h4&gt;
  
  
  Your Steps
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Create a temporary fix in a new commit that disables notifications: &lt;code&gt;NOTIFICATIONS_ENABLED = false&lt;/code&gt; in your &lt;code&gt;bugfix/login&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;Cherry-pick that commit into the production branch as an emergency patch.&lt;/li&gt;
&lt;li&gt;In your &lt;code&gt;bugfix/login&lt;/code&gt; branch, you fix the root issue. After thorough testing, you re-enable notifications (&lt;code&gt;NOTIFICATIONS_ENABLED = true&lt;/code&gt;) and merge your &lt;code&gt;bugfix/login&lt;/code&gt; branch to &lt;code&gt;production&lt;/code&gt; branch. Everything seems fine, no conflicts. &lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  The Silent Disaster
&lt;/h4&gt;

&lt;p&gt;Users report &lt;strong&gt;notifications are still off&lt;/strong&gt;, and you don't know why. I have added an image so that you can get the situation. I've shown the value of &lt;code&gt;NOTIFICATIONS_ENABLED&lt;/code&gt; at the top of each commit bubble.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvzvkw9dawxgsie6qybh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvzvkw9dawxgsie6qybh.png" alt="Situation 2" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What Happened?
&lt;/h4&gt;

&lt;p&gt;Git will compare by the &lt;strong&gt;3-way comparison&lt;/strong&gt; of Git merge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The value that the base commit has, which is true. Since the cherry-picked branch has a changed hash, it won't be considered the common base commit.&lt;/li&gt;
&lt;li&gt;The latest value of the bugfix/login branch is true, so Git thinks there were no changes.&lt;/li&gt;
&lt;li&gt;The latest value of the production branch is false, so Git thinks there was a change made later, and without showing any conflict, it replaces the value with false.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Situation 3: The Extra Changes
&lt;/h3&gt;

&lt;p&gt;Suppose your &lt;code&gt;feature.js&lt;/code&gt; on &lt;code&gt;main&lt;/code&gt; branch has a method named &lt;code&gt;isFeatureEnabled()&lt;/code&gt;, that is modified in &lt;code&gt;bugfix/user-access&lt;/code&gt; branch, and now you wanna cherry-pick the latest changes made to that method onto the &lt;code&gt;main&lt;/code&gt; branch. Let's say the commit is &lt;code&gt;C&lt;/code&gt;. After running &lt;code&gt;git cherry-pick C&lt;/code&gt;, you are seeing extra changes that were not in the commit you have picked.&lt;br&gt;
I have shown the changes of &lt;code&gt;feature.js&lt;/code&gt; across commits and branches.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe03ux6w9f685uriaryt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe03ux6w9f685uriaryt.png" alt="Situation 3" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  The Hidden Problem
&lt;/h4&gt;

&lt;p&gt;When you cherry-pick a commit, Git calculates the diff between that commit and its parent, and tries to apply that diff onto your current HEAD. This diff includes not only the changed lines, but also &lt;em&gt;context lines&lt;/em&gt; (unchanged lines around the change). Git uses context to figure out where in your codebase the patch should be applied. If the context doesn't match because your branch has diverged significantly, Git can't put the patch cleanly and will throw a conflict, prompting you to resolve it manually. That’s why you might see lines from earlier commits (&lt;code&gt;B&lt;/code&gt;) appear again during a cherry-pick of &lt;code&gt;commit C&lt;/code&gt;, especially when &lt;code&gt;commit C&lt;/code&gt; was built on top of changes you don't have in your branch.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Fix?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Situation 1: Merge Hell
&lt;/h3&gt;

&lt;p&gt;Abort the merge, &lt;code&gt;rebase&lt;/code&gt; your source branch onto the target branch. Test your changes thoroughly and review the diffs to ensure everything looks right. It might take extra time, but it's better than dealing with a broken merge later.&lt;/p&gt;
&lt;h3&gt;
  
  
  Situation 2: Disappearing Changes
&lt;/h3&gt;

&lt;p&gt;This one’s tricky since Git won’t show conflicts. If you've already merged and pushed, you'll need to either drop the bad commit or manually fix the logic. Then again, &lt;code&gt;rebase&lt;/code&gt; your source branch onto the target branch and carefully review &lt;code&gt;git diff&lt;/code&gt; before merging.&lt;/p&gt;
&lt;h3&gt;
  
  
  Situation 3: The Extra Changes
&lt;/h3&gt;

&lt;p&gt;Be careful while fixing conflicts. Be aware of your changes, and perform a thorough review.&lt;/p&gt;

&lt;p&gt;So, &lt;code&gt;rebase&lt;/code&gt; or/and &lt;code&gt;git diff&lt;/code&gt; with thorough review is my ultimate solution.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Avoid These Situations?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Always review the difference after cherry-picking, then push to the remote, even if Git shows no conflicts at all. Do &lt;code&gt;git diff HEAD^ HEAD&lt;/code&gt;, or &lt;code&gt;git show&lt;/code&gt;. This ensures the commit didn’t smuggle in unrelated changes due to contextual patching.&lt;/li&gt;
&lt;li&gt;Avoid cherry-picking someone else's commit unless necessary. If needed, create a patch branch and merge it into other branches. This preserves the original commit hash and avoids duplication. If cherry-picking is unavoidable, communicate clearly with your team and track which commits were moved.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;-x&lt;/code&gt; to track cherry-picked commits.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git cherry-pick -x &amp;lt;commit-hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;    This appends the source commit hash to the message. You can see the commit message using &lt;code&gt;git log -1&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commit aa334sss (HEAD -&amp;gt; temp-commit)
Author: iamauthor &amp;lt;author@gmail.com&amp;gt;
Date:   Wed Aug 6 16:47:06 2025 +0600

    test: try cherry

    (cherry picked from &amp;lt;commit-hash&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Isn't There a Better Way to Solve?
&lt;/h2&gt;

&lt;p&gt;There are plenty of ways to fix cherry-pick issues, but I stick to what I’m comfortable with. &lt;code&gt;cherry-pick&lt;/code&gt; is just a tool, and like any tool, it can make life easier if used properly. Git doesn’t know how your code works, so while it automates a lot, it still needs your attention. That’s why I am mentioning &lt;em&gt;thorough reviews&lt;/em&gt;. And sure, technical tools help, but &lt;em&gt;nothing beats solid team communication and regularly syncing with the branches you’re merging into&lt;/em&gt;. Take the time to understand Git and use it carefully, instead of picking up a bunch of complex tricks only to forget them later.&lt;/p&gt;




&lt;p&gt;See you next with &lt;strong&gt;Danger: You lost work or rewrote authorship after squash and force-push!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>git</category>
      <category>softwaredevelopment</category>
      <category>coding</category>
    </item>
    <item>
      <title>The Message is the Bug</title>
      <dc:creator>Nowshin Alam Owishi</dc:creator>
      <pubDate>Fri, 25 Jul 2025 17:25:49 +0000</pubDate>
      <link>https://dev.to/owishiboo/the-message-is-the-bug-4b07</link>
      <guid>https://dev.to/owishiboo/the-message-is-the-bug-4b07</guid>
      <description>&lt;p&gt;Git isn't something we study every day, yet we use it daily. Most of the time, we cycle through the same handful of commands, such as fetch, add, commit, and rebase, like muscle memory. It's ironic how something so essential remains so frustratingly complex.&lt;/p&gt;

&lt;p&gt;I'll be writing about some of the lessons I've learned from Git. To make things more readable, I'll be writing in separate blogs. I hope that it will help you avoid the disasters I once walked straight into. &lt;/p&gt;

&lt;p&gt;Let's start.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lazy Messages Can Come Back to Wreck You
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Using &lt;code&gt;git blame&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;You are in a hurry, office time ends in 2 minutes, you wanna commit with messages like "asdf" or "fixed bug", thinking you’ll finish it after the weekend, why spend so much time thinking about it? &lt;/li&gt;
&lt;li&gt;But somehow that weekend passes, and fast-forwarding two months later, you re-opened that project at 2 AM, or a teammate inherits your code. Suddenly, &lt;code&gt;git blame&lt;/code&gt; points to "asdf" and the author has your name. Now everyone hates you, including yourself.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;git bisect&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Suppose the production failed, and you need to know which commit failed. You are using &lt;code&gt;git bisect&lt;/code&gt; and find out that a commit with 55 file changes, and a commit message as &lt;strong&gt;"fixes"&lt;/strong&gt;, has caused the issue. &lt;/li&gt;
&lt;li&gt;Now, good luck first finding what the fixes were, then finding the one that introduced the bug. &lt;/li&gt;
&lt;li&gt;A good, well-written commit message may let you skip the first one. You would already know what the changes were and focus on finding the bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Went Wrong?
&lt;/h2&gt;

&lt;p&gt;You wrote commit messages for &lt;strong&gt;yourself&lt;/strong&gt;, not for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The developer who joins next year&lt;/li&gt;
&lt;li&gt;Your sleep-deprived future self&lt;/li&gt;
&lt;li&gt;The debugger team&lt;/li&gt;
&lt;li&gt;Or any other person who wants to read and review your code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Should You Do Then?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Think of what you have done:&lt;/strong&gt; Find out the core and crucial changes in your commit. Have multiple fixes in a single commit? Write with comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Think of the audience:&lt;/strong&gt; Write messages so that anyone engaged in that project can decode them in 10 seconds. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here are some examples of proper commit messages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Commit message 1 (with comments)- 
fix(auth): resolve critical security issues

- Handle null case in session timeout logic
- Fix authentication bypass in dashboard

# Commit message 2
feat(ui): implement dark mode toggle [WIP]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Write What Matters
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clarity beats rules, everything else is secondary.&lt;/strong&gt; The first and foremost thing in a commit message is that it should be understandable. The 50/72 rule won't be helpful if the commit message is ambiguous. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aim for precision first, add description when the impact or fix isn’t obvious.&lt;/strong&gt; Long commit messages are often a symptom that maybe your commit includes too many unrelated changes. Each commit should ideally represent a single logical unit of work, and its message should reflect that.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can find resources online on how to write proper commit messages. You'll get incredible guides on commit messages online; the internet has perfected this art far better than I could summarize here.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Add a New Commit Message
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single-line Commit Message
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "Add login validation"

# Or

git commit --message="Add login validation"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multi-line Commit Message
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "Add login validation" -m "Added frontend and backend validation for login" -m "Closes #123"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Editor-based Commit Message
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An editor will open, and write your commit there. However, you will have an advantage here. If you wanna break down your commit message into bullet points, leave an empty line after the subject, then start each line with a &lt;code&gt;-&lt;/code&gt; for better readability (just like markdown).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix: handle session timeouts

- added null check for expired tokens # bullet point 1
- ensured redirect to login page # bullet point 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can view your commit history, including the commit message, using &lt;code&gt;git log&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Alter Previous Commit Messages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Change the Latest Commit Message
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit --amend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This opens your editor. Update the message, then save and close.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change an Older Commit Message
&lt;/h3&gt;

&lt;p&gt;You will need to use interactive rebase for this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git rebase -i HEAD~3 # 3 is the position of the commit relative to the HEAD
# Or
git rebase -i abcd1234^ #abcd1234 is the hash of the commit that you wanna change
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will open a list of the last 3 commits in your default editor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick abcd1234 message you wanna change
pick aswd1235 other commit
pick iucd2234 other commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change &lt;code&gt;pick&lt;/code&gt; to &lt;code&gt;reword&lt;/code&gt; (or &lt;code&gt;r&lt;/code&gt;) for the commit you want to edit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reword abcd1234 message you wanna change
pick aswd1235 other commit
pick iucd2234 other commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then save &amp;amp; close.&lt;/p&gt;

&lt;p&gt;Git will open another editor window where you can change the message. Modify and save again, and you're done!&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Heads-up
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git amend&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt; rewrite history; they change the commit hash. If you’re editing an older commit (not the latest), rebase will also modify the hashes of all commits that come after it. Be careful when force-pushing, especially on shared branches, you might overwrite others' work.&lt;/p&gt;




&lt;p&gt;I chose this simplest yet crucial topic to give a good start to the series. Meet you in the next part with a more complicated topic - cherry-pick 🍒!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>git</category>
      <category>github</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Key Aspects to Consider in Software-Based Competitions</title>
      <dc:creator>Nowshin Alam Owishi</dc:creator>
      <pubDate>Thu, 25 Apr 2024 21:46:10 +0000</pubDate>
      <link>https://dev.to/owishiboo/key-aspects-to-consider-in-software-based-competitions-2ob0</link>
      <guid>https://dev.to/owishiboo/key-aspects-to-consider-in-software-based-competitions-2ob0</guid>
      <description>&lt;p&gt;My experience during my undergraduate years was filled with ups and downs. I participated in three software development-based competitions during my undergrad and was fortunate to place in each, despite feeling like I was on the verge of failure many times. However, I believe now is the perfect opportunity to share my thoughts. I'll only focus on weeks or month-long competitions where you will have enough time for careful planning, coding, and execution. Let's delve deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get a supportive teammate
&lt;/h2&gt;

&lt;p&gt;You should focus on exploration and learning, rather than just winning prize money. You may not be interested in every aspect of a project. For example, you might excel in coding, but you lack in presentation or design. Get a partner who can fill up your limitations. Collaborating with others can also help enhance your skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leverage Existing Resources
&lt;/h2&gt;

&lt;p&gt;It's crucial to prioritize your efforts to make the most of your time and learn how to code effectively. Instead of spending time on tasks that can be easily found online, you can visit GitHub to explore existing codes, see how they work, and reuse them. If you lack in designs, visit the UI templates-related websites. Use ChatGPT, Bard or any resources that can speed up your project. Merge your thoughts with the resources. Instead of copy-paste, try to understand the code. Put more effort into the core features that prove the unique characteristics of your app.&lt;/p&gt;

&lt;p&gt;Let me tell you my experience. In Therap Javafest 2023, my teammate and I wanted to create games for children using p5.js. We started by researching existing games available on the internet and drawing inspiration from them. Then, we delved into p5.js implementations to gain more knowledge. We came up with some ideas that were both feasible and entertaining. Meanwhile, we took a straightforward approach to the chatbot and grammar fixing. We utilized the ChatGPT API and some prompt engineering only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Focus on Tech Implementation
&lt;/h2&gt;

&lt;p&gt;When participating in a competition, we tend to focus on finding the most unique idea possible. However, the key to success lies in the idea's implementation using existing technologies. Remember, your innovation should involve exploring and learning while keeping an eye on winning the prize. If your idea doesn't have an interesting perspective from a technological standpoint, it may not have much impact.&lt;/p&gt;

&lt;p&gt;Read blogs and research about technologies to ensure that you use the most efficient and exciting technology. Make a stack of potential technologies and tools, then generate an idea that covers everything. It's necessary to challenge yourself, but it's equally important to be aware of your capabilities. Don't put yourself in a situation where you suffocate in an ocean of challenges later.&lt;/p&gt;

&lt;p&gt;For example, to learn how to implement any specific feature, start by establishing the basic development stack. Next, take some time to find an inspirational example and take note of these. Discuss with your partner to determine a feasible implementation plan. Then decide on the specific features you want to include and add your unique touch. Find some more features like that. Include 1-2 extra features in your initial planning as additional options. Don't go overboard with too many fancy features. It just makes it too much to handle. Additionally, basic features such as email verification during sign-up help to build a good foundation. These features are usually easy to implement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Push Yourself to the Limit
&lt;/h2&gt;

&lt;p&gt;Make sure that the time you spend on something has a positive outcome. If you're working on a project, make sure it's something you can show off later and that you learn something from it. Agile development can be stressful for software engineers, but it is also an opportunity for growth and learning. Try to challenge yourself and learn new things. Instead of using more and more similar frameworks, use frameworks to serve different purposes. You might not understand everything you're trying to learn, but your effort will still help you improve your skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adopt Best Practices
&lt;/h2&gt;

&lt;p&gt;Always remember that you can build a project even overnight. Everything you need is available on the internet. If you can't find something, don't worry - you don't know the right keywords yet (this line is for beginners only). Even if you are a beginner in the development field, try to implement good practices. For example, start with good naming conventions, and later work on structuring your frontend and backend. This will make your codebase more appealing to the judges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Develop Soft Skills
&lt;/h2&gt;

&lt;p&gt;Presentation is a crucial aspect of any competition. You may have an excellent project with many tools, but your presentation will display the value. Getting up on stage and improvising a speech is not going to work always.&lt;/p&gt;

&lt;p&gt;To ensure a successful presentation, practice as much as you need to. Don't just display your code, as it may not be easily readable on a big screen. Instead, use diagrams and structures with a fluent speech that will help you connect with the audience. Show how well your project performs rather than just demonstrating that it works. For instance, if you have a chatbot for children, rather than asking a simple question like "How are you?", ask something more captivating that only children may ask, like "Can birds swim in chocolate?" If you handled it perfectly, the answer will showcase your effort gloriously.&lt;/p&gt;

&lt;p&gt;Keep in mind that grabbing the attention of an audience is not an easy task. Practising your presentation will help you overcome the fear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accept Imperfections Gracefully
&lt;/h2&gt;

&lt;p&gt;Sometimes, despite your best efforts, a project may not turn out as expected. If this happens, don't get frustrated. Instead, take a step back and identify what went wrong. Start by listing the things that didn't go according to plan. It is acceptable to acknowledge logical flaws or limitations while highlighting positive aspects. For example, you can mention if you're facing issues with some public APIs that are not working as expected. Using paid tools won't make a significant difference in the competition. Your primary focus should be on the main feature of your project. It could be the structure, scalability, or implementation - anything you put your heart into. So explain the reasons to the judges and put pride in your efforts.&lt;/p&gt;

&lt;p&gt;Always keep &lt;strong&gt;two&lt;/strong&gt; things in mind: firstly, no matter how much you prepare, you can never be fully ready. Attend the competitions with whatever you have. Secondly, regardless of your position, there will always be someone better than you in the competition in any aspect. That's why keep an eye on others, communicate with them, and learn from their techniques. If you can master this approach, you can make the most of any competition you participate in.&lt;/p&gt;

&lt;p&gt;There are many points to note down. Take your time to accomplish them. Starting is better than nothing.&lt;/p&gt;

&lt;p&gt;My teammate &lt;a class="mentioned-user" href="https://dev.to/shikarisohan"&gt;@shikarisohan&lt;/a&gt; and I placed first on Therap Javafest 2023. I have attached the GitHub link below.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ShikariSohan" rel="noopener noreferrer"&gt;
        ShikariSohan
      &lt;/a&gt; / &lt;a href="https://github.com/ShikariSohan/kiwi" rel="noopener noreferrer"&gt;
        kiwi
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ShikariSohan/kiwi/blob/main/frontend/public/assets/logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FShikariSohan%2Fkiwi%2Fraw%2Fmain%2Ffrontend%2Fpublic%2Fassets%2Flogo.png" alt="star"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt; Kiwi&lt;/h1&gt;
&lt;/div&gt; &lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;An AI Powered Digital Playground Where
Education Meets Imagination&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The Kiwi is a solution that uses AI to transform children's digital experiences, enhancing learning and creativity. It stands as a beacon of hope, showcasing how AI can be harnessed to address the complex relationship between children and technology in today's digital age.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key points of Kiwi :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conventional Learning: Old learning but with new technologies&lt;/li&gt;
&lt;li&gt;Creative Learning: Learning with innovations&lt;/li&gt;
&lt;li&gt;Play &amp;amp; Fun: Games for learning&lt;/li&gt;
&lt;li&gt;Scalable Structure: Microservice in Java&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Watch a demo presentation of the app &lt;a href="https://youtu.be/hfG7nzVodfU" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
A PDF generated by our app is shown &lt;a href="https://github.com/ShikariSohan/kiwi/blob/main/frontend/a4.pdf" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Learning &amp;amp; Fun
&lt;ul&gt;
&lt;li&gt;Draw n Learn: Word Writing Practice Through Drawing&lt;/li&gt;
&lt;li&gt;Grammar Guru: Sentence Creation and Error Correction&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Creative Corner
&lt;ul&gt;
&lt;li&gt;Magical Story: Give Prompts and Generate Graphical Storybook PDFs&lt;/li&gt;
&lt;li&gt;Talky Pal: Interact with an Avatar Bot for Learning and Conversations&lt;/li&gt;
&lt;li&gt;Chat Buddy: Engage in Personalized Chats with…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ShikariSohan/kiwi" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>developers</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
