High-Frequency Git Operations for Everyday Development
Whether you're joining a new project, dealing with ignored files, or wanting to clean up your commit history, you'll often need to execute a set of Git commands. Here are some of the most frequent Git operations you may need in day-to-day development.
Connect Your Local Folder to a GitHub Repository
Scenario
You have an existing local folder with files and want to connect it to an already existing GitHub repository.
Steps
Initialize Git in your folder:
1 |
|
Add your GitHub repository (replace URL with your repo):
1 |
|
Fetch remote history:
1 |
|
Merge remote and local files, allowing unrelated histories (change main
to your repo's default branch if necessary):
1 |
|
If you see an error like:
The following untracked working tree files would be overwritten by merge...
We recommend:
1 |
|
Commit after resolving all conflicts:
1 |
|
Push to the remote repository (if needed):
1 |
|
The --set-upstream origin main
option is only needed for the first push; you don't need it afterward.
List What Files git add .
Would Stage
1 |
|
Example Output:
1 |
|
Breakdown:
M
= Modified (but not staged)??
= Untracked (new files)
Remove Previously Committed Files Now in .gitignore
Scenario
You added rules to .gitignore
but some files were already committed.
Steps
Stage removal of all currently tracked files (but not delete locally):
1 |
|
Add everything back to the repo ("add" skips gitignore
d files):
1 |
|
Commit the change:
1 |
|
At this point, the files are only removed from the repository from this commit onward (they'll still exist in older commits/history). If you want them removed from previous commits as well, consider squashing multiple commits into a single commit, as explained below.
Squash Multiple Commits into a Single Commit
Scenario
You have made several small commits (some of which may be faulty or embarassing) and want to clean up history by squashing them into one.
Steps
Review commit history:
1 |
|
Decide how many previous commits you want to squash.
Start an interactive rebase, e.g. with the last 3 commits:
1 |
|
In the opened editor:
- Leave
pick
for the first commit. - For the others, change
pick
tosquash
(or justs
). - Save and close.
You will then enter a second editor session. Edit the combined commit message. Save and close.
Force-push the branch to rewrite history on GitHub:
1 |
|
Note
- Use squashing carefully if collaborating, as force push overwrites history.