High-Frequency Git Operations for Everyday Development
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.
List Files Added, Removed, or Changed Relative to Another Commit
Run git status
and ensure you have no unstaged changes or staged but uncommitted changes. Then, to compare the current state (HEAD) against commit abcdef1
:
1 |
|
Output looks like:
1 |
|
- Added (A): File is present in
HEAD
but not inabcdef1
. - Deleted (D): File is present in
abcdef1
, but not inHEAD
. - Modified (M): File exists in both, but contents changed.
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.
List Branches
List local branches:
1 |
|
List remote branches:
1 |
|
List local and remote branches:
1 |
|
List Commits in Branches
To list commits in the branch feature
:
1 |
|
Copy Files and Folders from Another Branch or Commit Into Your Current Working Directory
Copy files and folders from the tip of branch feature
into your current working directory:
1 |
|
Copy files and folders from commit abcdef1
into your current working directory:
1 |
|
Delete a Local Branch
1 |
|
- This will refuse if the branch contains undeleted/unmerged changes.
List Remotes
1 |
|
This will display a list of remotes with their URLs, e.g.:
1 |
|
Push to a Specific Remote
1 |
|
<remote-name>
is the name of the remote you want to push to (e.g.,origin
,upstream
, etc).<branch-name>
is the branch you want to push (e.g.,main
,master
, etc).