Merge pull request #500 from kumon/master

Add "sync" command.
This commit is contained in:
Nimit Kalra 2016-01-16 23:41:03 -06:00
commit 98d0d8c642
5 changed files with 304 additions and 0 deletions

View file

@ -43,6 +43,7 @@
- [`git setup`](#git-setup)
- [`git squash`](#git-squash)
- [`git summary`](#git-summary)
- [`git sync`](#git-sync)
- [`git touch`](#git-touch)
- [`git undo`](#git-undo)
- [`git unlock`](#git-unlock)
@ -987,3 +988,18 @@ $ git psykorebase master feature
```
The above rebase `feature` branch on top of `master` branch
## git sync
Sync local branch with its remote branch
```bash
$ git sync
```
Sync local branch with origin/master
```bash
$ git sync origin master
```

77
bin/git-sync Executable file
View file

@ -0,0 +1,77 @@
#!/usr/bin/env bash
function _usage()
{
local command="git sync"
cat << EOS
Usage:
${command} [<remote> <branch>]
${command} -h | --help
Sync local branch with <remote>/<branch>.
When <remote> and <branch> are not specified on the command line, upstream of local branch will be used by default.
All changes and untracked files and directories will be removed.
Examples:
Sync with upstream of local branch:
${command}
Sync with origin/master:
${command} origin master
EOS
}
function main()
{
while [ "$1" != "" ]; do
case $1 in
-h | --help)
_usage
exit
;;
* )
if [ "${remote}" = "" ]; then
local remote="$1"
elif [ "${branch}" = "" ]; then
local branch="$1"
else
echo -e "Error: too many arguments.\n"
_usage
exit 1
fi
;;
esac
shift
done
local remote_branch
if [ "${remote}" = "" ]; then
if ! remote_branch="$(git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null)"; then
echo "There is no upstream information of local branch."
exit 1
fi
local branch="$(git rev-parse --abbrev-ref --symbolic-full-name @)"
local remote=$(git config "branch.${branch}.remote")
elif [ "${branch}" = "" ]; then
echo -e "Error: too few arguments.\n"
_usage
exit 1
else
remote_branch="${remote}/${branch}"
fi
echo "Are you sure you want to clean all changes & sync with '${remote_branch}'? [y/N]"
local res
read res
case "${res}" in
"Y" | "y" | "yes" | "Yes" | "YES" )
git fetch "${remote}" "${branch}" && git reset --hard "${remote_branch}" && git clean -d -f -x
;;
* )
echo "Canceled."
;;
esac
}
main "$@"

54
man/git-sync.1 Normal file
View file

@ -0,0 +1,54 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-SYNC" "1" "January 2016" "" ""
.
.SH "NAME"
\fBgit\-sync\fR \- Sync local branch with remote branch
.
.SH "SYNOPSIS"
\fBgit sync\fR [ <remote> <branch> ]
.
.SH "DESCRIPTION"
Sync local branch with <remote>/<branch>\.
.
.P
When <remote> and <branch> are not specified on the command line, upstream of local branch will be used by default\.
.
.P
All changes and untracked files and directories will be removed\.
.
.SH "EXAMPLES"
Sync local branch with its upstream
.
.IP "" 4
.
.nf
$ git sync
.
.fi
.
.IP "" 0
.
.P
Sync local branch with origin/master
.
.IP "" 4
.
.nf
$ git sync origin master
.
.fi
.
.IP "" 0
.
.SH "AUTHOR"
Written by Takuma Yamaguchi <\fIkumon0587@gmail\.com\fR>
.
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>

121
man/git-sync.html Normal file
View file

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-sync(1) - Sync local branch with remote branch</title>
<style type='text/css' media='all'>
/* style: man */
body#manpage {margin:0}
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
.mp h2 {margin:10px 0 0 0}
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
.mp h3 {margin:0 0 0 4ex}
.mp dt {margin:0;clear:left}
.mp dt.flush {float:left;width:8ex}
.mp dd {margin:0 0 0 9ex}
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
.mp pre {margin-bottom:20px}
.mp pre+h2,.mp pre+h3 {margin-top:22px}
.mp h2+pre,.mp h3+pre {margin-top:5px}
.mp img {display:block;margin:auto}
.mp h1.man-title {display:none}
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
.mp h2 {font-size:16px;line-height:1.25}
.mp h1 {font-size:20px;line-height:2}
.mp {text-align:justify;background:#fff}
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
.mp u {text-decoration:underline}
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
.mp b.man-ref {font-weight:normal;color:#434241}
.mp pre {padding:0 4ex}
.mp pre code {font-weight:normal;color:#434241}
.mp h2+pre,h3+pre {padding-left:0}
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
ol.man-decor {width:100%}
ol.man-decor li.tl {text-align:left}
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
ol.man-decor li.tr {text-align:right;float:right}
</style>
</head>
<!--
The following styles are deprecated and will be removed at some point:
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
.man-navigation should be used instead.
-->
<body id='manpage'>
<div class='mp' id='man'>
<div class='man-navigation' style='display:none'>
<a href="#NAME">NAME</a>
<a href="#SYNOPSIS">SYNOPSIS</a>
<a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#EXAMPLES">EXAMPLES</a>
<a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a>
</div>
<ol class='man-decor man-head man head'>
<li class='tl'>git-sync(1)</li>
<li class='tc'></li>
<li class='tr'>git-sync(1)</li>
</ol>
<h2 id="NAME">NAME</h2>
<p class="man-name">
<code>git-sync</code> - <span class="man-whatis">Sync local branch with remote branch</span>
</p>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<p> <code>git sync</code> [ &lt;remote&gt; &lt;branch&gt; ]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p> Sync local branch with &lt;remote&gt;/&lt;branch&gt;.</p>
<p> When &lt;remote&gt; and &lt;branch&gt; are not specified on the command line, upstream of local branch will be used by default.</p>
<p> All changes and untracked files and directories will be removed.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<p> Sync local branch with its upstream</p>
<pre><code>$ git sync
</code></pre>
<p> Sync local branch with origin/master</p>
<pre><code>$ git sync origin master
</code></pre>
<h2 id="AUTHOR">AUTHOR</h2>
<p>Written by Takuma Yamaguchi &lt;<a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#x3a;&#107;&#x75;&#109;&#x6f;&#x6e;&#x30;&#53;&#56;&#55;&#64;&#x67;&#x6d;&#97;&#105;&#108;&#x2e;&#99;&#111;&#109;" data-bare-link="true">&#107;&#117;&#109;&#x6f;&#110;&#48;&#x35;&#x38;&#x37;&#64;&#103;&#109;&#97;&#105;&#108;&#x2e;&#x63;&#111;&#x6d;</a>&gt;</p>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>January 2016</li>
<li class='tr'>git-sync(1)</li>
</ol>
</div>
</body>
</html>

36
man/git-sync.md Normal file
View file

@ -0,0 +1,36 @@
git-sync(1) -- Sync local branch with remote branch
=================================================================
## SYNOPSIS
`git sync` [ &lt;remote&gt; &lt;branch&gt; ]
## DESCRIPTION
Sync local branch with &lt;remote&gt;/&lt;branch&gt;.
When &lt;remote&gt; and &lt;branch&gt; are not specified on the command line, upstream of local branch will be used by default.
All changes and untracked files and directories will be removed.
## EXAMPLES
Sync local branch with its upstream
$ git sync
Sync local branch with origin/master
$ git sync origin master
## AUTHOR
Written by Takuma Yamaguchi &lt;<kumon0587@gmail.com>&gt;
## REPORTING BUGS
&lt;<https://github.com/tj/git-extras/issues>&gt;
## SEE ALSO
&lt;<https://github.com/tj/git-extras>&gt;