Version control is crucial in software development, but many engineers often struggle with using Git effectively when they start out. In this guide, we will go over the essential Git commands that you will use on a day-to-day basis. We will also cover common pitfalls that junior Git users encounter and provide tips on how to avoid them. Let’s dive in and learn how to use Git more cleanly, keeping your team happy.
#Pushing Code Changes
#Status
Git constantly tracks the changes you make locally. To understand the current state of your repository, use the following command:
git statusThe git status command is essential because it informs your next steps, such as add and commit. It shows the files that Git detects as modified or newly created in your project.
#Diff
To view the exact code changes that Git is aware of and what a commit will look like, use the git diff command:
git diff FILE_PATHThis command displays the added and deleted lines for the specified file. If the diff doesn’t match your expectations, make sure to save your changes in your preferred IDE or text editor. Alternatively, you can use git diff without specifying a file path to see all the changes you have made so far.
#Add
The git status command categorizes files in your local repository as either tracked or untracked. Tracked files are those that Git is aware of and have likely been committed before. Untracked files are new files that you haven’t added yet. The add command informs Git that you want to include a file in a future commit and eventually push it to the remote repository.
Note: Avoid using git add . as it adds all detected changes, including potentially unwanted files. Instead, selectively add individual files or use a proper .gitignore file. For example:
git add <file1> <file2>By adding only specific files, you ensure that you commit and push the intended changes without including unnecessary code.
#Commit
The commit command is used to create a new commit with the changes you have made.
git commit -m 'YOUR_COMMIT_MESSAGE'#Push
To send your committed changes to a remote repository (typically GitHub), use the git push command:
git pushBy default, this command pushes changes to the remote repository specified by the name origin. It also pushes local branches that don’t have matching counterparts on the remote repository. If you need to push a specific branch to a different remote or branch, use the following syntax:
git push REMOTE_NAME BRANCH_NAMEFor example, to push a local branch named my_local_branch_name to a remote branch named remote_branch_name on a remote named remote_name, use:
git push remote_name my_local_branch_name:remote_branch_name#Dealing with Other People’s Code
#Fetch
The fetch command retrieves new code from a remote repository without automatically merging it with your local code. This gives you full control over how you integrate the new code with your own. Unlike git pull, which combines the fetch and merge operations, git fetch allows you to review and modify the fetched code before merging. To fetch from a remote repository, use:
git fetch REMOTE_NAMEBy default, git fetch fetches from the origin remote. To fetch from a different remote, specify the remote name.
#Cherry Pick
Sometimes you may want to incorporate a specific commit into your local branch, even if there is no existing branch to merge or rebase against. In such cases, you can use the cherry-pick command. To cherry pick a commit, you need its unique commit ID. For example, to apply the changes from the commit with the ID COMMIT_ID, use:
git cherry-pick COMMIT_IDThis command allows you to add a specific commit’s changes to your local branch, enabling you to test or work with those changes individually.
#Stash
The stash command is useful when you need to temporarily hide your work in progress, especially when merging code. When you have uncommitted changes, Git becomes cautious, as it doesn’t know how to combine your changeswith the incoming changes. To stash your changes and revert your working directory to a clean state, use:
git stashLater, when you’re ready to continue working on your changes, you can apply the stash using:
git stash applyThis allows you to switch between tasks or branches without committing incomplete work.
#Working with Branches
#Branch
Branches are a fundamental aspect of Git. They allow you to work on different features or bug fixes independently. To create a new branch, use the following command:
git branch BRANCH_NAMEThis command creates a new branch based on your current branch. To switch to the newly created branch, use:
git checkout BRANCH_NAMEAlternatively, you can use a single command to create and switch to a new branch:
git checkout -b BRANCH_NAMEBranching enables parallel development and collaboration within your team.
#Merge
Merging combines changes from one branch into another. To merge a branch into your current branch, use:
git merge BRANCH_NAMEThis command brings in the changes from the specified branch and incorporates them into your current branch.
#Rebase
Rebasing is an alternative to merging that allows you to incorporate changes from one branch onto another branch more smoothly. It ensures a cleaner and linear commit history. To rebase your current branch onto another branch, use:
git rebase BRANCH_NAMEThis command moves your current branch’s commits to the tip of the specified branch, applying them one by one. Rebasing is particularly useful when you want to keep your branch up to date with the latest changes from a shared branch.
#Managing Remotes
#Remote
The remote command allows you to manage the remote repositories associated with your local repository. To view the remote repositories linked to your project, use:
git remote -vThis command lists all the remotes, their URLs, and the fetch and push URLs separately.
#Adding a Remote
To add a new remote repository, use the following command:
git remote add REMOTE_NAME REMOTE_URLReplace REMOTE_NAME with the desired name for the remote and REMOTE_URL with the URL of the remote repository.
#Removing a Remote
If you no longer need to interact with a remote repository, you can remove it using:
git remote remove REMOTE_NAMEThis command removes the specified remote from your local repository’s configuration.
#Conclusion
Mastering Git and its essential commands is crucial for effective version control and collaboration in software development. By understanding these commands and best practices, you can streamline your workflow, avoid common pitfalls, and ensure a clean and well-organized codebase. Remember to always refer to the official Git documentation for detailed information on each command and explore additional Git features to further enhance your productivity. Happy coding!