- Checkout a Remote Branch in Local
- Print the Short Commit SHA1 of a Git Tag
- Fix the
^MCharacter Shown in
- Prune stale remote branches in local repository
Checkout a Remote Branch in Local
$ git checkout --track origin/master
The above command creates a local branch with the same name, i.e.
master, as the remote branch,
and let the local branch track the remote one.
“Tracking” means when run
git push, Git knows where it pushes changes into.
Some notes from
git checkout --help,
As a convenience, –track without -b implies branch creation
When creating a new branch, set up “upstream” configuration.
If no -b option is given, the name of the new branch will be derived from the remote-tracking branch
Print the Short Commit SHA1 of a Git Tag
# Assume the Git tag is "0.1.0" $ git rev-list -n 1 0.1.0 --pretty=format:"%h" | tail -1 c363005
The tag “0.1.0” points to the commit
%H if the full SHA1 is needed.
(Search “placeholder” in
git show --help for the document of
--abbrev option, like
--abbrev=8, if a fixed width SHA1 is needed.
^M Character Shown in
git diff Result
Sometimes, when run
git diff, it prints
^M at the end of some lines.
^M character represents a carriage-return character, i.e.
CRLF, the new line character in Windows.
You may see
^M before, if you use Vim to edit some files coming for Windows/DOS.
^M in the
git diff result means the same line was ended with
CRLF but now
LF, or vice versa.
Usually, a Git repository should be configured in a way that all text files committed
into the repository end with
LF, while files checked out end the local machine specific
LF in Unix and
CRLF in Windows machines. So that
^M would not be seen
git diff. To fix a repository’s configuration, add a
.gitattributes file with content
# Set the default behavior, in case people don't have core.autocrlf set. * text=auto # Declare files that will always have CRLF line endings on checkout. *.bat text eol=crlf
“Renormalize” all the files with updated configuration.
$ git stash -u $ git add --renormalize . $ git status $ git commit -m "Normalize line endings" $ git stash pop
See this GitHub doc, Configuring Git to handle line endings, for more details.
Prune stale remote branches in local repository
As time goes by, local repository may have many remote branches, which were actually
deleted in remote repository. For example, in GitLab someone’s feature branch is usually
deleted while it’s merged by a merge request. However, these
origin/feat-y branches are kept in your local repository since they’re fetched.
To delete these stale remote branches in local all at once, run
$ git remote prune origin # Or, $ git fetch --prune
It’s said in
git remote --help,
might even prune local tags that haven’t been pushed there.
So it’s a good idea to run above commands with
--dry-run option first.
Delete one remote branch by
git branch -r -d origin/feat-x.