In this post I am going to show you some common scenarios you may suffer when you use git. To benefit from this tutorial please make sure you have already set-up a git environment. If not, I would advise you to take a look at here.
git add file
git commit -m "Aha, file modified"
Or, just type
git commit -am "Aha, file modified"
After that, push to remote repository:
git push origin branch_name
So, what’s difference between these two? I will reach to that later.
It’s a good practice to fix a wrong commit rather than make a new commit.
So, first, edit the file with the problem, make the corrections, then:
git add now_right_file
git commit --amend
git push --force branch_name # Warning!
Be careful, The --force
is dangerous, it works fine to me for 99% cases, but it dose have potential harmness, and that’s why Linus doesn’t recommend it.
There are two ways of delete files, delete locally and commit to remote repository, or just directly delete files in remote repository, like:
git rm --cached file_to_delete
Even better, you can delete all the files match a certain glob:
git rm --cached 'merge-*' # delete all the files start with "merge-"
There already has an excellent and well accepted answer on StackOverflow, it’s way much better than my explanation —> link:
In the simplest terms,
git pull
does agit fetch
followed by agit merge
.
You can do agit fetch
at any time to update your remote-tracking branches underrefs/remotes/
. This operation never changes any of your own local branches under/ refs/heads
, and is safe to do without changing your working copy. I have even heard of people running git fetch periodically in a cron job in the background (although I wouldn’t recommend doing this).A
git pull
is what you would do to bring a local branch up-to-date with its remote version, while also updating your other remote-tracking branches.
git pull # will auto merge unconflicted part
git status # check the information of conflicted files
Use your favorite editor to edit the conflicted file with “<<<<<<” and “>>>>>>”, save it, commit it, that’s all.
git checkout latest_branch
git merge -s ours to_overwrite_branch
What’s the ours
means here? It’s a merge strategy, you can find it in git checkout doc:
git checkout [--ours| theirs] branch --ours --theirs
When checking out paths from the index, check out stage #2 (ours) or #3 (theirs) for unmerged paths.
The index may contain unmerged entries because of a previous failed merge. By default, if you try to check out such an entry from the index, the checkout operation will fail and nothing will be checked out. Using -f will ignore these unmerged entries. The contents from a specific side of the merge can be checked out of the index by using —ours or —theirs. With -m, changes made to the working tree file can be discarded to re-create the original conflicted merge result.
git branch -d died_branch
git push origin --delete die_branch # or git push origin :died_branch
git reflog show # find revision hash
git checkout revision_hash .
I will explain this a little bit. git reflog show
gives us a list of all the commits and their hashes. Then, checkout that specific hash.
Read more:
Many people always ask how to combine git add
and git commit
in one command, and the most answered solution is git commit -a -m "blah blah"
.
Yes and no. For the files which have been git add
before, git commit -a
will do the git add
for you. But for rest files(aka untracked files), we have to the git add
. If you really want to save the time for these tedious work, alias is what you are looking for.
In .gitignore:
# Ignore everything
*
!except_script.sh
This will ignore everything but except_scrpit.sh.
Once my silly cat was dancing on my keyboard after a commit mess up all the files!
Luckily, we can use
git reset hard --HEAD^
to revert to the previous commit.
Or, I wrongly git add should_not_add_file
, we can also use
git reset HEAD should_not_add_file
to upstage that file.
Stolen from Stackoverflow again
git clone -b <branch> <remote_repo>
Example:
git clone -b my-branch git@github.com:user/myproject.git
Alternative (no public key setup needed):
git clone -b my-branch https://git@github.com/username/myproject.git