Commit dd5316c3 authored by lishijun's avatar lishijun

create git FAE alpha version

parent 45742b1d
.DS_Store
\ No newline at end of file
language: ruby
rvm:
- 2.2
before_script:
- gem install awesome_bot
script:
- awesome_bot README.md --white-list gitflow-installer.sh,domain.com/user/repo.git
# gitFAE
# Git Cheat Sheet 中文版 [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
-----------------
<p align="center">
<img alt="Git" src="./Img/git-logo.png" height="190" width="455">
</p>
------------------
# Other Available Languages:
1. [Arabic Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-ar.md)
2. [English Git Cheat Sheet](https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/other-sheets/git-cheat-sheet-en.md)
3. [Hindi Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-hi.md)
4. [Turkish Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-tr.md)
5. [Spanish Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-es.md)
6. [Nepalese Git Cheat Sheet](https://github.com/Imsatis/Git-Cheat-Sheet/blob/master/other-sheets/git-cheat-sheet-np.md)
Git cheat sheet 让你不用再去记所有的git命令。
欢迎贡献内容、更新语法错误,也欢迎添加你母语版本的Git cheat sheet。
---------------------
Git Cheat Sheet 中文版
=====================
### 索引
* [配置](#配置)
* [配置文件](#配置文件)
* [创建](#创建)
* [本地修改](#本地修改)
* [搜索](#搜索)
* [提交历史](#提交历史)
* [分支与标签](#分支与标签)
* [更新与发布](#更新与发布)
* [合并与重置](#合并与重置)
* [撤销](#撤销)
* [Git Flow](#git-flow)
---
### 配置
##### 列出当前配置:
```
$ git config --list
```
##### 列出repository配置:
```
$ git config --local --list
```
##### 列出全局配置:
```
$ git config --global --list
```
##### 列出系统配置:
```
$ git config --system --list
```
##### 设置用户名:
```
$ git config --global user.name “[firstname lastname]”
```
##### 设置用户邮箱:
```
$ git config --global user.email “[valid-email]”
```
##### 设置git命令输出为彩色:
```
$ git config --global color.ui auto
```
##### 设置git使用的文本编辑器设:
```
$ git config --global core.editor vi
```
---------
### 配置文件
##### Repository配置对应的配置文件路径[--local]:
```
<repo>/.git/config
```
##### 用户全局配置对应的配置文件路径[--global]:
```
~/.gitconfig
```
##### 系统配置对应的配置文件路径[--local]:
```
/etc/gitconfig
```
----------
### 创建
##### 复制一个已创建的仓库:
```bash
# 通过 SSH
$ git clone ssh://user@domain.com/repo.git
#通过 HTTP
$ git clone http://domain.com/user/repo.git
```
##### 创建一个新的本地仓库:
```
$ git init
```
---
### 本地修改
##### 显示工作路径下已修改的文件:
```
$ git status
```
##### 显示与上次提交版本文件的不同:
```
$ git diff
```
##### 把当前所有修改添加到下次提交中:
```
$ git add .
```
##### 把对某个文件的修改添加到下次提交中:
```
$ git add -p <file>
```
##### 提交本地的所有修改:
```
$ git commit -a
```
##### 提交之前已标记的变化:
```
$ git commit
```
##### 附加消息提交:
```
$ git commit -m 'message here'
```
##### 提交,并将提交时间设置为之前的某个日期:
```
git commit --date="`date --date='n day ago'`" -am "Commit Message"
```
##### 修改上次提交
<em><sub>请勿修改已发布的提交记录!</sub></em>
```
$ git commit --amend
```
##### 修改上次提交的committer date:
```
GIT_COMMITTER_DATE="date" git commit --amend
```
##### 修改上次提交的author date:
```
git commit --amend --date="date"
```
##### 把当前分支中未提交的修改移动到其他分支:
```
git stash
git checkout branch2
git stash pop
```
##### 将 stashed changes 应用到当前分支:
```
git stash apply
```
##### 删除最新一次的 stashed changes:
```
git stash drop
```
---
### 搜索
##### 从当前目录的所有文件中查找文本内容:
```
$ git grep "Hello"
```
##### 在某一版本中搜索文本:
```
$ git grep "Hello" v2.5
```
---
### 提交历史
##### 从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间):
```
$ git log
```
##### 显示所有提交(仅显示提交的hash和message):
```
$ git log --oneline
```
##### 显示某个用户的所有提交:
```
$ git log --author="username"
```
##### 显示某个文件的所有修改:
```
$ git log -p <file>
```
##### 仅显示远端<remote/master>分支与远端<origin/master>分支提交记录的差集:
```
$ git log --oneline <origin/master>..<remote/master> --left-right
```
##### 谁,在什么时间,修改了文件的什么内容:
```
$ git blame <file>
```
##### 显示reflog:
```
$ git reflog show
```
##### 删除reflog:
```
$ git reflog delete
```
---
### 分支与标签
##### 列出所有的分支:
```
$ git branch
```
##### 列出所有的远端分支:
```
$ git branch -r
```
##### 切换分支:
```
$ git checkout <branch>
```
##### 创建并切换到新分支:
```
$ git checkout -b <branch>
```
##### 基于当前分支创建新分支:
```
$ git branch <new-branch>
```
##### 基于远程分支创建新的可追溯的分支:
```
$ git branch --track <new-branch> <remote-branch>
```
##### 删除本地分支:
```
$ git branch -d <branch>
```
##### 强制删除一个本地分支:<br>
<em><sub>将会丢失未合并的修改!</sub></em>
```
$ git branch -D <branch>
```
##### 给当前版本打标签:
```
$ git tag <tag-name>
```
##### 给当前版本打标签并附加消息:
```
$ git tag -a <tag-name>
```
---
### 更新与发布
##### 列出当前配置的远程端:
```
$ git remote -v
```
##### 显示远程端的信息:
```
$ git remote show <remote>
```
##### 添加新的远程端:
```
$ git remote add <remote> <url>
```
##### 下载远程端版本,但不合并到HEAD中:
```
$ git fetch <remote>
```
##### 下载远程端版本,并自动与HEAD版本合并:
```
$ git remote pull <remote> <url>
```
##### 将远程端版本合并到本地版本中:
```
$ git pull origin master
```
##### 以rebase方式将远端分支与本地合并:
```
git pull --rebase <remote> <branch>
```
##### 将本地版本发布到远程端:
```
$ git push remote <remote> <branch>
```
##### 删除远程端分支:
```
$ git push <remote> :<branch> (since Git v1.5.0)
or
git push <remote> --delete <branch> (since Git v1.7.0)
```
##### 发布标签:
```
$ git push --tags
```
---
### 合并与重置(Rebase)
##### 将分支合并到当前HEAD中:
```
$ git merge <branch>
```
##### 将当前HEAD版本重置到分支中:
<em><sub>请勿重置已发布的提交!</sub></em>
```
$ git rebase <branch>
```
##### 退出重置:
```
$ git rebase --abort
```
##### 解决冲突后继续重置:
```
$ git rebase --continue
```
##### 使用配置好的merge tool 解决冲突:
```
$ git mergetool
```
##### 在编辑器中手动解决冲突后,标记文件为`已解决冲突`:
```
$ git add <resolved-file>
```
```
$ git rm <resolved-file>
```
##### 合并提交:
```
$ git rebase -i <commit-just-before-first>
```
把上面的内容替换为下面的内容:
原内容:
```
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
```
替换为:
```
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
```
---
### 撤销
##### 放弃工作目录下的所有修改:
```
$ git reset --hard HEAD
```
##### 移除缓存区的所有文件(i.e. 撤销上次`git add`):
```
$ git reset HEAD
```
##### 放弃某个文件的所有本地修改:
```
$ git checkout HEAD <file>
```
##### 重置一个提交(通过创建一个截然不同的新提交)
```
$ git revert <commit>
```
##### 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改:
```
$ git reset --hard <commit>
```
##### 用远端分支强制覆盖本地分支:
```
git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
```
##### 将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改:
```
$ git reset <commit>
```
##### 将HEAD重置到上一次提交的版本,并保留未提交的本地修改:
```
$ git reset --keep <commit>
```
##### 删除添加`.gitignore`文件前错误提交的文件:
```
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
```
---
=====================
# 索引
* [用户配置](#用户配置)
* [应用](#应用)
---------
###用户配置
##### 用户名邮箱配置:
```
$ git config --global user.name “[firstname lastname]”
$ git config --global user.email “[valid-email]”
```
##### SSH配置:
```
$ cd ~/.ssh
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub
# add SSH in gitlab
copy into gitlab SSH keygen
```
##### Beyond Compare配置:
```
# config Beyond Compare for difftool
$ git config --global diff.tool bc4
$ git config --global difftool.prompt false
$ git config --global difftool.bc4.cmd '"C:\Program Files\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE"'
# config Beyond Compare for mergetool
$ git config --global merge.tool bc4
$ git config --global mergetool.prompt false
$ git config --global mergetool.bc4.cmd '"C:\Program Files\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"'
$ git config --global mergetool.bc4.trustexitcode true
使用git mergetool合并分支时,总会产生以*.orig为扩展名的备份文件, 为了解决这个问题,执行:
$ git config --global mergetool.keepBackup false
```
##### clone git to local:
```
$ git clone 代码库的url
$ git config --global user.email “[valid-email]”
```
---------
###应用
##### git新建分支并提交代码:
```
$ git status //查看当前branch状态
$ git log //查看日志状态
$ git pull origin branch //拉取remote最新branch状态
$ git log //查看日志状态
$ git checkout -b newBranch //新建新分支
$ git status //查看当前branch状态
$ git add . //提交所有变化到暂存区
$ git commit -m “message” //提交修改信息
$ git tag 2021_01_02_1620 . //tag info
$ git push origin newBranch //提交到remote newBranch
$ git push --tag //push所有tag
```
##### git分支对比:
```
$ git status //查看当前branch状态
$ git log //查看日志状态
$ git pull origin branch1 //拉取remote最新branch1状态:获取对比分支最新代码
$ git log //查看日志状态
$ git checkout Branch2 //工作分支分支
$ git status //查看当前branch状态
$ git difftool branch1
```
##### git分支合并:
```
$ git status //查看当前branch状态
$ git log //查看日志状态
$ git pull origin branch1 //拉取remote最新branch1状态:获取对比分支最新代码
$ git log //查看日志状态
$ git checkout Branch2 //工作分支分支
$ git status //查看当前branch状态
$ git merge branch1 //合并branch1 into Branch2,如果存在冲突,
$ git mergetool //解决冲突
$ git mergetool --continue //merge继续执行
# Esc -> :-> wq -> git push origin branch //提交到remote Branch2
如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支
A----C----E(master)
\
B---D---F(dev)
它们的head指针分别指向E和F,对上述做如下操作:
git checkout master //选择or切换到master分支
git merge dev //将dev分支合并到当前分支(master)中
合并完成后:
A---C---E---G(master)
\ /
B---D---F(dev)
现在ABCDEFG属于master,G是一次合并后的结果,是将E和F的代码合并后的结果,可能会出现冲突。而ABDF依然属于dev分支。可以继续在dev的分支上进行开发:
A---C---E---G---H(master)
\ /
B---D---F---I(dev)
```
##### git分支转移:
```
$ git cherry-pick <另一个分支需要合并的id> //上面命令就会将指定的提交commitHash,应用于当前分支
如:
git checkout master分支
git cherry-pick D # 这个 D分支或者hash号码,位于需要合并过来的分支中:
git push
如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支
A----C----E(master)
\
B---D---F(dev)
它们的head指针分别指向E和F,对上述做如下操作:
git checkout master //选择or切换到master分支
git cherry-pick D //将D分支合并到当前分支(master)中
合并完成后:
A---C---E---D(master)
\
B---D---F(dev)
```
##### git版本回退:
```
$ git status //查看当前branch状态
$ git reset --hard HEAD^ //回退到上一个版本,删除当前版本(HEAD代表当前版本,有一个^代表上一个版本,以此类推)
# Or
$ git revert HEAD //revert是撤销某次提交,但是这次撤销也会作为一次提交进行保存(建议采用该方式)
```
---
## Git-Flow
### 索引
* [安装](#安装)
* [开始](#开始)
* [特性](#特性)
* [做一个release版本](#做一个release版本)
* [紧急修复](#紧急修复)
* [Commands](#commands)
---
### 安装
- 你需要有一个可以工作的 git 作为前提。
- Git flow 可以工作在 OSX, Linux 和 Windows之下
##### OSX Homebrew:
```
$ brew install git-flow
```
##### OSX Macports:
```
$ port install git-flow
```
##### Linux:
```
$ apt-get install git-flow
```
##### Windows (Cygwin):
安装 git-flow, 你需要 wget 和 util-linux。
```
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```
----
### 开始
- 为了自定义你的项目,Git flow 需要初始化过程。
- 使用 git-flow,从初始化一个现有的 git 库内开始。
- 初始化,你必须回答几个关于分支的命名约定的问题。建议使用默认值。
```
git flow init
```
---
### 特性
- 为即将发布的版本开发新功能特性。
- 这通常只存在开发者的库中。
##### 创建一个新特性:
下面操作创建了一个新的feature分支,并切换到该分支
```
git flow feature start MYFEATURE
```
##### 完成新特性的开发:
完成开发新特性。这个动作执行下面的操作:
1. 合并 MYFEATURE 分支到 'develop'
2. 删除这个新特性分支
3. 切换回 'develop' 分支
```
git flow feature finish MYFEATURE
```
##### 发布新特性:
你是否合作开发一项新特性?
发布新特性分支到远程服务器,所以,其它用户也可以使用这分支。
```
git flow feature publish MYFEATURE
```
##### 取得一个发布的新特性分支:
取得其它用户发布的新特性分支。
```
git flow feature pull origin MYFEATURE
```
##### 追溯远端上的特性:
通过下面命令追溯远端上的特性
```
git flow feature track MYFEATURE
```
---
### 做一个release版本
- 支持一个新的用于生产环境的发布版本。
- 允许修正小问题,并为发布版本准备元数据。
##### 开始创建release版本:
- 开始创建release版本,使用 git flow release 命令。
- 'release' 分支的创建基于 'develop' 分支。
- 你可以选择提供一个 [BASE]参数,即提交记录的 sha-1 hash 值,来开启动 release 分支。
- 这个提交记录的 sha-1 hash 值必须是'develop' 分支下的。
```
git flow release start RELEASE [BASE]
```
创建 release 分支之后立即发布允许其它用户向这个 release 分支提交内容是个明智的做法。命令十分类似发布新特性:
```
git flow release publish RELEASE
```
(你可以通过
`git flow release track RELEASE` 命令追溯远端的 release 版本)
##### 完成 release 版本:
完成 release 版本是一个大 git 分支操作。它执行下面几个动作:
1. 归并 release 分支到 'master' 分支。
2. 用 release 分支名打 Tag
3. 归并 release 分支到 'develop'
4. 移除 release 分支。
```
git flow release finish RELEASE
```
不要忘记使用`git push --tags`将tags推送到远端
---
### 紧急修复
紧急修复来自这样的需求:生产环境的版本处于一个不预期状态,需要立即修正。有可能是需要修正 master 分支上某个 TAG 标记的生产版本。
##### 开始 git flow 紧急修复:
像其它 git flow 命令一样, 紧急修复分支开始自:
```
$ git flow hotfix start VERSION [BASENAME]
```
VERSION 参数标记着修正版本。你可以从 `[BASENAME]开始,`[BASENAME]`为finish release时填写的版本号
##### 完成紧急修复:
当完成紧急修复分支,代码归并回 develop 和 master 分支。相应地,master 分支打上修正版本的 TAG。
```
git flow hotfix finish VERSION
```
---
### Commands
<p align="center">
<img alt="Git" src="./Img/git-flow-commands.png" height="270" width="460">
</p>
<hr>
### Git flow schema
<p align="center">
<img alt="Git" src="Img/git-flow-commands-without-flow.png">
</p>
<hr>
### Git REMOTE-repository-workspace
<p align="center">
<img alt="Git" src="Img/remote_loacl.png">
</p>
<hr>
git相关使用教程
\ No newline at end of file
Git Cheat Sheet Arabic [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
===============
### الفهرس
* [الإنشاء](#الإنشاء)
* [التعديلات المحلية](#التعديلات-المحلية)
* [المؤشر](#المؤشر)
* [للتراجع](#للتراجع)
* [للحذف](#للحذف)
* [لنقل الملفات](#لنقل-الملفات)
* [التفاصيل التاريخية](#التفاصيل-التاريخية)
* [مستودع الشفيرة](#مستودع-الشفيرة)
* [للإختصارات والأسماء مسـتعارة](#للإختصارات-والأسماء-مسـتعارة)
* [للتنظيف](#للتنظيف)
##الإنشاء
##### :لإنشـاء مسـتودع فـارغ
```
$ git init
```
##التعديلات المحلية
##### :لإضافة ملف
```
$ git add <file_name>
```
__:مثال على ذلك__
```
$ git add home.php
$ git add contact.php
$ git add admin.php
```
##### :لإضافة العديد من الملفات
```
$ git add .
```
##### :للتخزيـن الفعـلي للتعديـلات و حفظها
```
$ git commit -m 'reason here..'
```
##### : للتراجـع عـن العمليـات و التعديـلات التـي تقـوم بهـا
```
$ git commit --amend
```
__:commit مثال يوضح كيفية إضافة ملف بعد عمل__
```
$ git commit -m 'initial commit'
$ git add file.cpp
$ git commit --amend
```
##### : لعرض تفاصيل عن حالة الملفات
```
$ git status
```
##### : للحصول على تقرير مختصر عن حالة الملفات
```
$ git status --short
```
##### : للحصول على تقرير مختصر حول حالة المشروع والتعديلات الحالية
```
$ git status -s
```
##### : إلغاء كل التعديلات والعودة للنسخة التي كنت عليها قبل البدء في التعديل
```
$ git checkout -- <file_name>
```
__:مثال على ذلك__
```
$ git checkout -- file.java
```
##### :Commit لحفظ حالة التفرع على ما هي عليه حتى تعود إليها مرة أخرى وتكمل العمل دون أن تحفظ أي
```
$ git stash
```
##### : لمعرفـة قائمة الحـالات التـي قمـت بتخزينهـا لكي تسـاعدك في الرجـوع للحالـة التي تريدها
```
$ git stash list
```
##### :Reapply لعرض قائمة بالحالات التي قمت بتخزينها من قبل و بإمكانك الرجوع لأي منها، أي عمل
```
$ git stash apply
```
##### : للعـودة لأحـد الحـالات المخزنـة مسـبقاً، فبإمكانـك اسـتخدام الاسـم الـذي يظهـر مـع تلـك الحالـة عنـد القيـام بتنفيـذ الأمـر
```
$ git stash apply stash@{2}
```
##المؤشر
##### :Tags لعرض قائمة
```
$ git tag
```
##### :Tags للبحث عن
```
$ git tag -l <صيغة معينة>
```
__:مثال على ذلك__
```
$ git tag -l "v1.7*"
```
##### :Annotated Tag لإنشاء
```
$ git tag -a v1.8.0 -m 'version 1.8' # للتوضيح💡 Tag name is: v1.8.0, After -m you just write a message that will be saved with the tag.
```
##### :Lightweight Tag لإنشاء
```
$ git tag v1.8.0
```
##### :Tag لرؤية تفاصيل أكثر عن
```
$ git show v1.8.0
```
##للتراجع
##### :Unstage للتراجع ولجعل الملف بحالة
```
$ git reset HEAD <file_name>
```
__:مثال على ذلك__
```
$ git reset HEAD myCode.c
```
##للحذف
##### : لحذف ملف وإلغاء متابعته
```
$ git rm <file_name>
$ git commit -m 'reason here..'
```
__:مثال على ذلك__
```
$ git rm myFile.py
$ git commit -m 'Delete myFile.py 🐍'
```
__:txt in settings folder مثال يوضح كيفية حذف جميع ملفات__
```
$ git rm settings/\*.txt
$ git commit -m 'Delete all .txt files in settings folder'
```
##### : لحذف المتابعة مع بقاء الملف نفسه
```
$ git rm --cached <file_name>
```
__:مثال على ذلك__
```
$ git rm --cached myFile.py
```
##لنقل الملفات
##### : لنقل الملف من جلد إلى مجلد
```
$ git mv <source> <destination>
```
__:base.rb ➡️ lib folder مثال يوضح نقل__
```
$ git mv base.rb lib/base.rb
```
##### : ويمكنك إستخدام الأمر لإعادة تسميه ملف
```
$ git mv <old_file_name> <new_file_name>
```
__:مثال على ذلك__
```
$ git mv core.java base.java
```
##التفاصيل التاريخية
##### : لرؤية التفاصيل السابقة للمستودع الذي تعمل عليه
```
$ git log
```
##### :commits لرؤية التفاصيل السابقة للمستودع الذي تعمل عليه ولتحديد عدد
```
$ git log -n # n للتوضيح💡 مجرد عدد
```
__:مثال على ذلك__
```
$ git log -2
```
##### :commits لمعرفة تفاصيل أكثر عن
```
$ git log -p
```
##### : لرؤية عدد من الإحصائيات بشكل مختصر
```
$ git log -stat
```
##### : لعرض المعلومات بطريقة مبسطة وبسطر واحد
```
$ git log --pretty=oneline
```
##### : لتحديـد طريقـة العـرض التـي تريدهـا و المعلومـات التـي تريـد وضعهـا
```
$ git log --pretty=format:<طريقة العرض التي تريدها>
```
__:مثال على ذلك__
```
$ git log --pretty=format:"%h - %an, %ar"
```
__:شرح لبعض أهم الرموز المتاحة__
يعني | الرمز
----|--------
commit hash 🔖 commit هو الرقم الذي يأتي مع | %H
نفس السابق ولكن يعرض بطريقة مختصرة أي عدد محدد من الأرقام | %h
Author Name 🙋🏻 من قام بعمل التعديلات | %an
Author Email 📧 بريد من قام بالتعديلات | %ae
Author Date 📆 تاريخ إضافة التعديلات | %ar
الرسالة أو النص الذي يوضح سبب التعديلات | %s
##### : لتحديـد المخرجـات زمنيـاً
```
$ git log --since=<المدة الزمنية التي تريدها>
```
__:مثال يوضح المدة الزمنية قبل أسبوعين__
```
$ git log --since=2.weeks
```
##### :التي في تعديلاتها نص معين commits
```
$ git log -S <النص الذي تريده>
```
__:myFunction مثال يوضح البحث عن__
```
$ git log -S myFunction
```
__:أهـم (وليـس كل) الخيـارات التـي تسـاعدك عـلى تحديـد المخرجـات وفـق المعايـر التـي تريدهـا__
يعني | الرمز
----|--------
عرض عدد محدد من المخرجات | -n
التعديلات بعد تاريخ معين | --since, --after
التعديلات قبل تاريخ معين | --until, --before
جلب المخرجات التي تطابق المؤلف | --author
##مستودع الشفيرة
##### :Remote Repository لإضافة
```
$ git remote add [remote_name] [remote_URL]
```
__:مثال على ذلك__
```
$ git remote add calc https://github.com/algorithmers/calc
```
##### : لمعرفـة المسـتودعات التـي نتعامـل معهـا عن بعد
```
$ git remote -v
```
##### : للحصـول عـلى قائمة بالأسماء المسـتعارة أو المـؤشرات التـي تشير لتلـك المسـتودعات بـدون التفاصيـل الأخـرى التـي ترافقهـا
```
$ git remote
```
##### :Working Directory لنسـخ مسـتودع شـيفرة و جلبـه إلى
```
$ git clone [repository_URL]
```
__:مثال على ذلك__
```
$ git clone https://github.com/algorithmers/my.git
```
##### : تحديـد اسـم خـاص بالمجلـد إذا لم تكـن تريـد الإسم الإفـتراضي
```
$ git clone [repository_URL] [new-name]
```
__:مثال على ذلك__
```
$ git clone https://github.com/algorithmers/my.git proj
```
##### :Remote Repository لجلـب البيانـات الموجـودة في
```
$ git fetch [remote-name]
```
__:مثال على ذلك__
```
$ git fetch origin
```
##### : رفـع البيانـات أو التعديـلات الجديـدة التـي قـام بهـا المطـور إلى مسـتودع الشـيفرة الموجـود عـلى السيرفر
```
$ git push [remote-name] [branch-name]
```
__:مثال على ذلك__
```
$ git push origin master
```
##### :Remote Repository لمعرفـة تفاصيـل أكثر حـول
```
$ git remote show [remote-name]
```
__:مثال على ذلك__
```
$ git remote show origin
```
##### :Server لإعادة تسمية الإسم المختـصر الـذي قمـت بإضافتـه لمسـتودع شـيفرة موجـود عـلى
```
$ git remote rename [old-remote-name] [new-remote-name]
```
__:مثال على ذلك__
```
$ git remote rename dev devrepo
```
##### :لحذف المستودع
```
$ git remote rm [remote-name]
```
__:مثال على ذلك__
```
$ git remote rm devrepo
```
##للإختصارات والأسماء مسـتعارة
##### : لوضـع أسماء مسـتعارة أو مختـصرة لأوامـر كاملـة أو إختصـار لجـزء معين من الأمر
```
$ git config --global alias.<الأمر الذي تود إختصاره> <الإختصار الذي تريده>
```
__:مثال على ذلك__
```
$ git config --global alias.st status
```
##للتنظيف
##### : لتنظيـف و إزالـة الملفـات أو المجلـدات الزائـدة أو التـي لا تحتـاج إليهـا
```
$ git clean -f -d
```
##### : لتنظيـف و إزالـة الملفـات أو المجلـدات الزائـدة مع تزويدك بصـورة عـن مـا سـيتم حذفـه فعليـاً قبـل حذفـه بشـكل فعـلي
```
$ git clean -n -d
```
##### :.gitigonre لحـذف الملفـات و المجلـدات الموجـودة أيضـاً في
```
$ git clean -f -d -x
```
##### : للتحقق مما سيتم حذفه قبل حذفه بشكل فعلي
```
$ git clean -n -d -x
```
##### : للتنظيف و الحذف من خلال الأسلوب التفاعلي
```
$ git clean -x -i
```
Git Cheat Sheet - git-flow [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
===============
<hr>
<p align="center">
<img alt="Git" src="../Img/git-logo.png" height="190" width="455">
</p>
<hr>
# Other Available Languages:
1. [Arabic Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-ar.md)
2. [Chinese Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-zh.md)
3. [Hindi Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-hi.md)
4. [Turkish Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-tr.md)
5. [Spanish Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-es.md)
Git cheat sheet saves you from learning all the commands by heart.
Be free to contribute, update the grammar mistakes. You are also free to add your language file.
<hr>
Git Cheat Sheet English
===============
###Index
* [Set Up](#setup)
* [Configuration Files](#configuration-files)
* [Create](#create)
* [Local Changes](#local-changes)
* [Search](#search)
* [Commit History](#commit-history)
* [Branches & Tags](#branches--tags)
* [Update & Publish](#update--publish)
* [Merge & Rebase](#merge--rebase)
* [Undo](#undo)
* [Git Flow](#git-flow)
<hr>
##Setup
#####Show current configuration:
```
$ git config --list
```
#####Show repository configuration:
```
$ git config --local --list
```
#####Show global configuration:
```
$ git config --global --list
```
#####Show system configuration:
```
$ git config --system --list
```
#####Set a name that is identifiable for credit when review version history:
```
$ git config --global user.name “[firstname lastname]”
```
#####Set an email address that will be associated with each history marker:
```
$ git config --global user.email “[valid-email]”
```
#####Set automatic command line coloring for Git for easy reviewing:
```
$ git config --global color.ui auto
```
#####Set global editor for commit
```
$ git config --global core.editor vi
```
<hr>
##Configuration Files
#####Repository specific configuration file [--local]:
```
<repo>/.git/config
```
#####User-specific configuration file [--global]:
```
~/.gitconfig
```
#####System-wide configuration file [--system]:
```
/etc/gitconfig
```
<hr>
##Create
#####Clone an existing repository:
There are two ways:
Via SSH
```
$ git clone ssh://user@domain.com/repo.git
```
Via HTTP
```
$ git clone http://domain.com/user/repo.git
```
#####Create a new local repository:
```
$ git init
```
<hr>
##Local Changes
#####Changes in working directory:
```
$ git status
```
#####Changes to tracked files:
```
$ git diff
```
#####Add all current changes to the next commit:
```
$ git add .
```
#####Add some changes in &lt;file&gt; to the next commit:
```
$ git add -p <file>
```
#####Commit all local changes in tracked files:
```
$ git commit -a
```
#####Commit previously staged changes:
```
$ git commit
```
#####Commit with message:
```
$ git commit -m 'message here'
```
#####Commit skipping the staging area and adding message:
```
$ git commit -am 'message here'
```
#####Commit to some previous date:
```
git commit --date="`date --date='n day ago'`" -am "Commit Message"
```
#####Change last commit:<br>
<em><sub>Don't amend published commits!</sub></em>
```
$ git commit -a --amend
```
#####Change committer date of last commit:
```
GIT_COMMITTER_DATE="date" git commit --amend
```
#####Change Author date of last commit:
```
git commit --amend --date="date"
```
#####Move uncommitted changes from current branch to some other branch:<br>
```
git stash
git checkout branch2
git stash pop
```
#####Restore stashed changes back to current branch:
```
git stash apply
```
#####Remove the last set of stashed changes:
```
git stash drop
```
<hr>
##Search
#####A text search on all files in the directory:
```
$ git grep "Hello"
```
#####In any version of a text search:
```
$ git grep "Hello" v2.5
```
<hr>
###Commit History
#####Show all commits, starting with newest (it'll show the hash, author information, date of commit and title of the commit):
```
$ git log
```
#####Show all the commits(it'll show just the commit hash and the commit message):
```
$ git log --oneline
```
#####Show all commits of a specific user:
```
$ git log --author="username"
```
#####Show changes over time for a specific file:
```
$ git log -p <file>
```
#####Display commits that are present only in remote/branch in right side
```
$ git log --oneline <origin/master>..<remote/master> --left-right
```
#####Who changed, what and when in &lt;file&gt;:
```
$ git blame <file>
```
#####Show Reference log:
```
$ git reflog show
```
#####Delete Reference log:
```
$ git reflog delete
```
<hr>
##Branches & Tags
#####List all local branches:
```
$ git branch
```
#####List all remote branches:
```
$ git branch -r
```
#####Switch HEAD branch:
```
$ git checkout <branch>
```
#####Create and switch new branch:
```
$ git checkout -b <branch>
```
#####Create a new branch based on your current HEAD:
```
$ git branch <new-branch>
```
#####Create a new tracking branch based on a remote branch:
```
$ git branch --track <new-branch> <remote-branch>
```
#####Delete a local branch:
```
$ git branch -d <branch>
```
#####Force delete a local branch:
<em><sub>You will lose unmerged changes!</sub></em>
```
$ git branch -D <branch>
```
#####Mark the current commit with a tag:
```
$ git tag <tag-name>
```
#####Mark the current commit with a tag that includes a message:
```
$ git tag -a <tag-name>
```
<hr>
##Update & Publish
#####List all current configured remotes:
```
$ git remote -v
```
#####Show information about a remote:
```
$ git remote show <remote>
```
#####Add new remote repository, named &lt;remote&gt;:
```
$ git remote add <remote> <url>
```
#####Download all changes from &lt;remote&gt;, but don't integrate into HEAD:
```
$ git fetch <remote>
```
#####Download changes and directly merge/integrate into HEAD:
```
$ git remote pull <remote> <url>
```
#####Get all changes from HEAD to local repository:
```
$ git pull origin master
```
#####Get all changes from HEAD to local repository without a merge:
```
git pull --rebase <remote> <branch>
```
#####Publish local changes on a remote:
```
$ git push remote <remote> <branch>
```
#####Delete a branch on the remote:
```
$ git push <remote> :<branch> (since Git v1.5.0)
or
git push <remote> --delete <branch> (since Git v1.7.0)
```
#####Publish your tags:
```
$ git push --tags
```
<hr>
##Merge & Rebase
#####Merge <branch> into your current HEAD:
```
$ git merge <branch>
```
#####Rebase your current HEAD onto &lt;branch&gt;:<br>
<em><sub>Don't rebase published commit!</sub></em>
```
$ git rebase <branch>
```
#####Abort a rebase:
```
$ git rebase --abort
```
#####Continue a rebase after resolving conflicts:
```
$ git rebase --continue
```
#####Use your configured merge tool to solve conflicts:
```
$ git mergetool
```
#####Use your editor to manually solve conflicts and (after resolving) mark file as resolved:
```
$ git add <resolved-file>
```
```
$ git rm <resolved-file>
```
#####Squashing commits:
```
$ git rebase -i <commit-just-before-first>
```
Now replace this,
```
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
```
to this,
```
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
```
<hr>
##Undo
#####Discard all local changes in your working directory:
```
$ git reset --hard HEAD
```
#####Get all the files out of the staging area(i.e. undo the last `git add`):
```
$ git reset HEAD
```
#####Discard local changes in a specific file:
```
$ git checkout HEAD <file>
```
#####Revert a commit (by producing a new commit with contrary changes):
```
$ git revert <commit>
```
#####Reset your HEAD pointer to a previous commit and discard all changes since then:
```
$ git reset --hard <commit>
```
#####Reset your HEAD pointer to a remote branch current state.
```
git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
```
#####Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes:
```
$ git reset <commit>
```
#####Reset your HEAD pointer to a previous commit and preserve uncommitted local changes:
```
$ git reset --keep <commit>
```
#####Remove files that were accidentally committed before they were added to .gitignore
```
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
```
<hr>
##Git-Flow
###Index
* [Setup](#setup)
* [Getting Started](#getting-started)
* [Features](#features)
* [Make a Release](#make-a-release)
* [Hotfixes](#hotfixes)
* [Commands](#commands)
<hr>
###Setup
######You need a working git installation as prerequisite. Git flow works on OSX, Linux and Windows.
#####OSX Homebrew:
```
$ brew install git-flow
```
#####OSX Macports:
```
$ port install git-flow
```
#####Linux (Debian-based):
```
$ apt-get install git-flow
```
#####Windows (Cygwin):
######You need wget and util-linux to install git-flow.
```
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```
<hr>
###Getting Started
######Git flow needs to be initialized in order to customize your project setup. Start using git-flow by initializing it inside an existing git repository:
#####Initialize:
######You'll have to answer a few questions regarding the naming conventions for your branches. It's recommended to use the default values.
```
git flow init
```
<hr>
###Features
######Develop new features for upcoming releases. Typically exist in developers repos only.
#####Start a new feature:
######This action creates a new feature branch based on 'develop' and switches to it.
```
git flow feature start MYFEATURE
```
#####Finish up a feature:
######Finish the development of a feature. This action performs the following:
######1)Merged MYFEATURE into 'develop'.
######2)Removes the feature branch.
######3)Switches back to 'develop' branch
```
git flow feature finish MYFEATURE
```
#####Publish a feature:
######Are you developing a feature in collaboration? Publish a feature to the remote server so it can be used by other users.
```
git flow feature publish MYFEATURE
```
#####Getting a published feature:
######Get a feature published by another user.
```
git flow feature pull origin MYFEATURE
```
#####Tracking a origin feature:
######You can track a feature on origin by using
```
git flow feature track MYFEATURE
```
<hr>
###Make a Release
######Support preparation of a new production release. Allow for minor bug fixes and preparing meta-data for a release
#####Start a release:
######To start a release, use the git flow release command. It creates a release branch created from the 'develop' branch. You can optionally supply a [BASE] commit sha-1 hash to start the release from. The commit must be on the 'develop' branch.
```
git flow release start RELEASE [BASE]
```
######It's wise to publish the release branch after creating it to allow release commits by other developers. Do it similar to feature publishing with the command:
```
git flow release publish RELEASE
```
######(You can track a remote release with the: ```git flow release track RELEASE``` command)
#####Finish up a release:
######Finishing a release is one of the big steps in git branching. It performs several actions:
######1)Merges the release branch back into 'master'
######2)Tags the release with its name
######3)Back-merges the release into 'develop'
######4)Removes the release branch
```
git flow release finish RELEASE
```
######Don't forget to push your tags with ```git push --tags```
<hr>
###Hotfixes
######Hotfixes arise from the necessity to act immediately upon an undesired state of a live production version. May be branched off from the corresponding tag on the master branch that marks the production version.
#####Git flow hotfix start:
######Like the other git flow commands, a hotfix is started with
```
$ git flow hotfix start VERSION [BASENAME]
```
######The version argument hereby marks the new hotfix release name. Optionally you can specify a basename to start from.
#####Finish a hotfix:
######By finishing a hotfix it gets merged back into develop and master. Additionally the master merge is tagged with the hotfix version
```
git flow hotfix finish VERSION
```
<hr>
###Commands
<p align="center">
<img alt="Git" src="../Img/git-flow-commands.png" height="270" width="460">
</p>
<hr>
###Git flow schema
<p align="center">
<img alt="Git" src="../Img/git-flow-commands-without-flow.png">
</p>
<hr>
Git Cheat Sheet Spanish [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
===============
### Índice
* [Configuración](#configuración)
* [Archivos de Configuración](#archivos-de-configuración)
* [Crear](#crear)
* [Cambios locales](#cambios-locales)
* [Buscar](#buscar)
* [Historial de Commits](#historial-de-commits)
* [Ramas & Etiquetas](#ramas--etiquetas)
* [Actualizar & Publicar](#actualizar--publicar)
* [Fusionar & Rebasar](#fusionar--rebasar)
* [Deshacer](#deshacer)
* [Git Flow](#git-flow)
<hr>
## Configuración
##### Mostrar la cofiguración actual:
```
$ git config --list
```
##### Mostrar la configuración local:
```
$ git config --local --list
```
##### Mostrar la configuración global:
```
$ git config --global --list
```
##### Mostrar la configuración del sistema:
```
$ git config --system --list
```
##### Establecer un nombre que es identificable de crédito cuando se revise el historial de versiones:
```
$ git config --global user.name “[nombre apellido]”
```
##### Establecer una dirección de email que será asociada con cada marca histórica:
```
$ git config --global user.email “[email-válido]”
```
##### Establecer coloreado automático de la línea de comandos de Git para una fácil revisión:
```
$ git config --global color.ui auto
```
##### Establecer el editor global para commits:
```
$ git config --global core.editor vi
```
<hr>
## Archivos de Configuración
##### Archivo de configuración específico del repositorio [--local]:
```
<repo>/.git/config
```
##### Archivo de configuración específico del usuario [--global]:
```
~/.gitconfig
```
##### Archivo de configuración del sistema [--system]:
```
/etc/gitconfig
```
<hr>
## Crear
##### Clonar un repositorio existente:
Existen dos maneras:
Vía SSH
```
$ git clone ssh://usuario@dominio.com/repo.git
```
Vía HTTP
```
$ git clone http://dominio.com/usuario/repo.git
```
##### Crea un nuevo repositorio local:
```
$ git init
```
<hr>
## Cambios Locales
##### Cambios en el directorio de trabajo:
```
$ git status
```
##### Cambios en archivos rastreados:
```
$ git diff
```
##### Agregar todos los cambios actuales al siguiente commit:
```
$ git add
```
##### Agregar algunos cambios de &lt;archivo&gt; para el siguiente commit:
```
$ git add -p <archivo>
```
##### Realizar un commit de todos los cambios locales en los archivos rastreados:
```
$ git commit -a
```
##### Realizar un commit de los cambios previamente almacenados en el área de pruebas (stage area):
```
$ git commit
```
##### Realizar un commit con un mensaje:
```
$ git commit -m 'aquí el mensaje'
```
##### Realizar un commit saltándose el área de pruebas y agregando un mensaje:
```
$ git commit -am 'aquí el mensaje'
```
##### Realizar un commit a alguna fecha anterior:
```
git commit --date="`date --date='n day ago'`" -am "Mensaje del commit"
```
##### Cambiar último commit:
<em><sub>¡No modificar commits ya publicados!</sub></em>
```
$ git commit -a --amend
```
##### Cambiar fecha del último commit:
```
GIT_COMMITTER_DATE="date" git commit --amend
```
##### Cambiar fecha del autor del último commit:
```
git commit --amend --date="date"
```
##### Mover cambios no confirmados (uncommitted changes) de la rama actual a otra rama:<br>
```
git stash
git checkout branch2
git stash pop
```
##### Restaurar cambios del área de pruebas (stage area) a la rama actual:
```
git stash apply
```
##### Eliminar la última serie de cambios del área de pruebas (stage area):
```
git stash drop
```
<hr>
## Buscar
##### Un texto en todos los archivos del directorio:
```
$ git grep "Hola"
```
##### Un texto en cualquier versión:
```
$ git grep "Hola" v2.5
```
<hr>
## Historial de Commits
##### Mostrar todos los commits, empezando por los más recientes (se mostrará el hash, información sobre el autor, fecha y título del commit):
```
$ git log
```
##### Mostrar todos los commits (sólo se mostrará el hash y el mensaje del commit):
```
$ git log --oneline
```
##### Mostrar todos los commits de un usuario específico:
```
$ git log --author="usuario"
```
##### Mostrar los cambios a través del tiempo de un archivo específico:
```
$ git log -p <archivo>
```
##### Mostrar commmits que están presentes sólamente en remote/branch al lado derecho:
```
$ git log --oneline <origin/master>..<remote/master> --left-right
```
##### Quién cambió, qué y cuándo en &lt;archivo&gt;:
```
$ git blame <archivo>
```
##### Mostrar reference log:
```
$ git reflog show
```
##### Borrar reference log:
```
$ git reflog delete
```
<hr>
## Ramas & Etiquetas
##### Listar todas las ramas locales:
```
$ git branch
```
##### Listar todas las ramas remotas:
```
$ git branch -r
```
##### Cambiar rama HEAD:
```
$ git checkout <rama>
```
##### Crear nueva rama y cambiar a esta:
```
$ git checkout -b <rama>
```
##### Crear nueva rama basada en la rama HEAD actual:
```
$ git branch <nueva-rama>
```
##### Crear nueva rama de seguimiento basada en una rama remota:
```
$ git branch --track <nueva-rama> <rama-remota>
```
##### Eliminar una rama local:
```
$ git branch -d <rama>
```
##### Forzar eliminación de una rama local:
<em><sub>¡Perderás los cambios sin fusionar!</sub></em>
```
$ git branch -D <branch>
```
##### Marcar el commit actual con una etiqueta:
```
$ git tag <tag-name>
```
##### Marcar el commit actual con una etiqueta que incluye un mensaje:
```
$ git tag -a <etiqueta>
```
<hr>
## Actualizar & Publicar
##### Listar todos los remotos configurados actuales:
```
$ git remote -v
```
##### Mostrar información sobre un remoto:
```
$ git remote show <remoto>
```
##### Agregar un nuevo repositorio, nombrado &lt;remoto&gt;:
```
$ git remote add <remoto> <url>
```
##### Descargar todos los cambios de &lt;remoto&gt;, pero no integrarlos al HEAD:
```
$ git fetch <remoto>
```
##### Descargar cambios y fusionarlos/integrarlos directamente al HEAD:
```
$ git remote pull <remote> <url>
```
##### Obtener todos los cambios del HEAD al repositorio local:
```
$ git pull origin master
```
##### Obtener todos los cambios del HEAD al repositorio local sin fusionar:
```
git pull --rebase <remote> <branch>
```
##### Publicar cambios locales en un remoto:
```
$ git push remote <remoto> <rama>
```
##### Eliminar una rama en el remoto:
```
$ git push <remoto> :<rama> (desde Git v1.5.0) ó $ git push <remoto> --delete <rama> (desde Git v1.7.0)
```
##### Publicar tus etiquetas:
```
$ git push --tags
```
<hr>
## Fusionar y Rebasar
##### Fusionar <rama> en tu HEAD actual:
```
$ git merge <rama>
```
##### Rabasar tu actual HEAD sobre &lt;rama&gt;:<br>
<em><sub>¡No rebasar commits ya publicados!</sub></em>
```
$ git rebase <rama>
```
##### Aborta un rebase:
```
$ git rebase --abort
```
##### Continuar un rebase después de resolver conflictos:
```
$ git rebase --continue
```
##### Usar tu herramienta de fusión configurada para resolver conflictos:
```
$ git mergetool
```
##### Usar tu editor para manualmente resolver conflictos y (después de resueltos) marcar el archivo como resuelto:
```
$ git add <archivo-resuelto>
```
```
$ git rm <archivo-resuelto>
```
##### Aplastando commits (squashing):
```
$ git rebase -i <commit-just-before-first>
```
Ahora reemplazando esto,
```
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
```
con esto,
```
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
```
<hr>
## Deshacer
##### Descartar todos los cambios locales en tu directorio de trabajo:
```
$ git reset --hard HEAD
```
##### Sacar todos los archivos del área de pruebas (es decir, deshacer el último `git add`):
```
$ git reset HEAD
```
##### Descartar cambios locales de un archivo específico:
```
$ git checkout HEAD <archivo>
```
##### Revertir un commit (produciendo un nuevo commit con los cambios contrarios):
```
$ git revert <commit>
```
##### Reestablecer tu puntero HEAD a un commit anterior y descartar todos los cambios desde entonces:
```
$ git reset --hard <commit>
```
##### Reestablecer tu putero HEAD al estado actual de una rama remota.
```
$ git reset --hard <remote/branch> es decir, upstream/master, origin/my-feature
```
##### Reestablecer tu puntero HEAD a un commit anterior y preservar todos los cambios en el área de pruebas (stage area):
```
$ git reset <commit>
```
##### Reestablecer tu puntero HEAD a un commit anterior y preservar los cambios locales sin confirmar (uncommitted changes):
```
$ git reset --keep <commit>
```
##### Remover los archivos que fueron accidentalmente agregados al commit antes de ser añadidos al .gitignore:
```
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
```
<hr>
## Git-Flow
### Índice
* [Configuración](#configuración)
* [Iniciando](#iniciando)
* [Features (características)](#features__características_)
* [Hacer un lanzamiento](#hacer-un-lanzamiento)
* [Hotfixes (revisiones)](#hotfixes__revisiones_)
* [Comandos](#commandos)
<hr>
### Configuración
###### Necesitas tener Git instalado como prerequisito. Git flow trabaja en OSX, Linux y Windows.
##### OSX Homebrew:
```
$ brew install git-flow
```
##### OSX Macports:
```
$ port install git-flow
```
##### Linux (basado en Debian):
```
$ apt-get install git-flow
```
##### Windows (Cygwin):
###### Necesitas wget y util-linux para instalar git-flow.
```
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```
<hr>
### Iniciando
###### Git flow necesita ser inicializado con el fin de personalizar la configuración de tu proyecto. Empieza usando git-flow inicializándolo dentro de un repositorio git existente:
##### Inicilizar:
###### Tendrás que responder un par de preguntas acerca de las convenciones de nombramiento de tus ramas. Es recomendable usar los valores por defecto.
```
git flow init
```
<hr>
### Features (características)
###### Desarrolla nuevos features para próximos lanzamientos. Típicamente sólo existen en los repositorios de desarrolladores.
##### Iniciar un nuevo feature:
###### Esta acción crea una nueva rama (feature branch) basada en la rama de desarrollo (develop branch) y cambia a esta.
```
git flow feature start MIFEATURE
```
##### Terminar un feature:
###### Finalizar el desarrollo de un feature. Esta accion realiza lo siguiente:
###### 1) Fusiona MIFEATURE con la rama de desarrollo (develop branch).
###### 2) Elimina la rama del feature (feature branch).
###### 3) Cambia nuevamente a la rama de desarrollo (develop branch).
```
git flow feature finish MIFEATURE
```
##### Publicar un feature:
###### ¿Estás desarrollando un feature colaborativamente? Publica un feature en el servidor remoto, así puede ser usado por otros usuarios.
```
git flow feature publish MIFEATURE
```
##### Obteniendo un feature publicado:
###### Obtener un feature publicado por otro usuario.
```
git flow feature pull origin MIFEATURE
```
##### Rastrear un origin feature:
###### Puedes rastrear un feature en origin usando:
```
git flow feature track MIFEATURE
```
<hr>
### Hacer un lanzamiento
###### Apoya la preparación de un nuevo lanzamiento a producción. Permite la corrección de pequeños bugs y la preparación de metadatos para un lanzamiento.
##### Empezar un lanzamiento:
###### Para empezar un lanzamiento, usa el comando "release" de git flow. Este crea una rama de lanzamiento (release branch) de la rama de desarrollo (develop branch). Opcionalmente puedes sustituir el hash sha-1 de un commit [BASE] para empezar el lanzamiento desde este. El commit debe estar en la rama de desarrollo (develop branch).
```
git flow release start RELEASE [BASE]
```
###### Es aconsejable publicar la rama de lanzamiento (release branch) después de crearla para permitir publicar commits de otros desarrolladores. Hazlo de manera similar a publicar un feature con el comando:
```
git flow release publish RELEASE
```
###### (Puedes rastrear un lanzamiento remoto con el comando: ```git flow release track RELEASE```)
##### Terminando un lanzamiento:
###### Terminando un lanzamiento es uno de los grandes pasos en la ramificación de git. Realiza varias acciones:
###### 1) Fusiona la rama de lanzamiento (release branch) con la rama master.
###### 2) Etiqueta la publicación con su nombre.
###### 3) Vuelve a fusionar la rama de lanzamiento (release branch) en la rama de desarrollo (develop branch).
###### 4) Elimina la rama de lanzamiento (release branch).
```
git flow release finish RELEASE
```
###### No olvides de publicar tus etiquetas con ```git push --tags```
<hr>
### Hotfixes (revisiones)
###### Los hotfixes surgen de la necesidad de actuar inmediatamente ante un estado indeseado en una versión de producción en vivo. Puede ser desramificada de la correspondiente etiqueta en la rama master que marca la versión de producción.
##### Emepezar un hotfix en git flow:
###### Como los otros comandos de git flow, un hotfix es inicializado con:
```
$ git flow hotfix start VERSION [BASENAME]
```
###### El argumento versión marca el nombre de publicación del nuevo hotfix. Opcionalmente puedes especificar un nombre base desde cual empezar.
##### Terminar un hotfix:
###### Al finalizar un hotfix este se fusiona nuevamente con la rama de desarrollo y la rama master. Adicionalmente la fusión master es etiquetada con la versión del hotfix.
```
git flow hotfix finish VERSION
```
<hr>
### Comandos
<p align="center">
<img alt="Git" src="./Img/git-flow-commands.png" height="270" width="460">
</p>
<hr>
### Esquema de git flow
<p align="center">
<img alt="Git" src="Img/git-flow-commands-without-flow.png">
</p>
<hr>
Git Cheat Sheet Hindi [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
===============
###सूची
* [निर्माण](#निर्माण)
* [स्थानीय परिवर्तन](#स्थानीय-परिवर्तन)
* [खोज](#खोज)
* [कमेट इतिहास](#कमेट-इतिहास)
* [शाखाएं और टैग](#शाखाएं-और-टैग)
* [मर्ज और रिबेस](मर्ज-और-रिबेस)
* [पूर्ववत](पूर्ववत)
<hr>
##निर्माण
#####एक मौजूदा भंडार का क्लोन:
```
$ git clone ssh://user@domain.com/repo.git
```
#####एक नए स्थानीय भंडार बनाएं :
```
$ git init
```
<hr>
##स्थानीय परिवर्तन
#####कार्य फ़ोल्डर में परिवर्तन:
```
$ git status
```
#####ट्रैक फ़ाइलों में परिवर्तन:
```
$ git diff
```
#####अगले कमेट करने के लिए नई फ़ाइलों को जोड़ना:
```
$ git add
```
#####अगले कमेट करने के लिए <फ़ाइल> में कुछ बदलाव जोड़ना:
```
$ git add -p <file>
```
#####ट्रैक फ़ाइलों में सभी परिवर्तन के लिए कमेट:
```
$ git commit -a
```
#####पिछले परिवर्तन के लिए कमेट:
```
$ git commit
```
#####संदेश के साथ कमेट:
```
$ git commit -m 'message here'
```
#####पिछले कुछ तारीख के लिए कमेट:
```
git commit --date="`date --date='n day ago'`" -am "Commit Message"
```
#####पिछले कमेट बदलें:<br>
######प्रकाशित कमेट का संशोधन मत करो!
```
$ git commit --amend
```
#####शाखा में वर्तमान अन्य शाखा में ले जाएँ:
```
git stash
git checkout branch2
git stash pop
```
<hr>
##खोज
#####फ़ोल्डर में सभी फाइलों पर एक खोज:
```
$ git grep "hello"
```
#####एक खोज के किसी भी संस्करण में:
```
$ git grep "hello" v2.5
```
<hr>
##कमेट इतिहास
#####नवीनतम के साथ शुरू, सब कमेट दिखाएँ:
```
$ git log
```
#####सब कमेट दिखाएँ (कोई लेखक जानकारी नहीं):
```
$ git log --oneline
```
#####एक विशिष्ट लेखक के सभी कमेट दिखाएँ:
```
$ git log --author="username"
```
#####एक विशिष्ट फ़ाइल के लिए समय के साथ परिवर्तन दिखाएँ:
```
$ git log -p <file>
```
#####एक फाइल में कौन क्या बदला:
```
$ git blame <file>
```
<hr>
##शाखाएं और टैग
#####सभी स्थानीय शाखाओं की सूची:
```
$ git branch
```
#####सिर शाखा बदलने:
```
$ git checkout <branch>
```
#####नई शाखा बनाएँ और उस पर जाने:
```
$ git checkout -b <new-branch>
```
#####एक रिमोट शाखा पर आधारित एक नए ट्रैकिंग शाखा बनाएँ:
```
$ git branch --track <new-branch> <remote-branch>
```
#####स्थानीय शाखा हटाना:
```
$ git branch -d <branch>
```
<hr>
##मर्ज और रिबेस
#####एक शाखा मर्ज:
```
$ git merge <branch>
```
#####Rebase your current HEAD onto &lt;branch&gt;:<br>
######प्रकाशित कमेट का रिबेस मत करो!!
```
$ git rebase <branch>
```
#####रिबेस छोड़ना:
```
$ git rebase --abort
```
#####संघर्ष को हल करने के बाद एक रिबेस जारी:
```
$ git rebase --continue
```
#####संघर्ष का समाधान करने के लिए अपने से कॉन्फ़िगर मर्ज उपकरण का उपयोग करें:
```
$ git mergetool
```
#####सुलझाया के रूप में मैन्युअल निशान फ़ाइल (हल करने के बाद) संघर्षों और हल करने के लिए अपने संपादक का उपयोग करें:
```
$ git add <resolved-file>
```
```
$ git rm <resolved-file>
```
<hr>
##पूर्ववत
#####अपने कार्य निर्देशिका में सभी स्थानीय परिवर्तनों को छोड़ें:
```
$ git reset --hard HEAD
```
#####मचान क्षेत्र से बाहर सभी फ़ाइलों को प्राप्त(पिछले ```git add``` पूर्ववत):
```
$ git reset HEAD
```
#####एक विशिष्ट फ़ाइल में स्थानीय परिवर्तनों को छोड़ें:
```
$ git checkout HEAD <file>
```
#####कमेट एक वापस लाएं:
```
$ git revert <commit>
```
#####Reset your HEAD pointer to a previous commit and discard all changes since then:
```
$ git reset --hard <commit>
```
#####Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes:
```
$ git reset <commit>
```
#####Reset your HEAD pointer to a previous commit and preserve uncommitted local changes:
```
$ git reset --keep <commit>
```
<hr>
Git Cheat Sheet - Git-Flow [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
===============
<hr>
<p align="center">
<img alt="Git" src="https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/Img/git-logo.png" height="190" width="455">
</p>
<hr>
# Other Available Languages:
1. [Arabic Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-ar.md)
2. [Chinese Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-zh.md)
3. [Hindi Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-hi.md)
4. [Turkish Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-tr.md)
5. [Spanish Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-es.md)
Git cheat sheet saves you from learning all the commands by heart.
Be free to contribute, update the grammar mistakes. You are also free to add your language file.
<hr>
Git Cheat Sheet Nepalese [N P](#N-P) [![.](https://github.com/Imsatis/GIt-Command/blob/master/nepgitcom/Flag-logo.svg)](#)
===============
###अनुक्रमणिका
* [सेटअप](#सेटअप-)
* [कन्फिगरेसन फाइलहरू](कन्फिगरेसन-फाइलहरू)
* [सिर्जना](#सिर्जना)
* [स्थानीय परिवर्तनहरू](#स्थानीय-परिवर्तनहरू)
* [खोजी गर्नुहोस्](#खोजी-गर्नुहोस्)
* [कमिटि इतिहास](#कमिटि-इतिहास)
* [शाखाहरू र ट्यागहरू](#शाखाहरू-र-ट्यागहरू)
* [अपडेट र प्रकाशित](#अपडेट-र-प्रकाशित)
* [मर्ज र विस्थापन](#मर्ज-र-विस्थापन)
* [पूर्ववत](#पूर्ववत)
* [Git प्रवाह](#Git-प्रवाह)
<hr>
[###सेटअप](###सेटअप)
##### वर्तमान कन्फिगरेसन देखनु:
```
$ git config --list
```
##### भण्डार कन्फिगरेसन देखनु:
```
$ git config --local --list
```
##### विश्वव्यापी विन्यास देखनु:
```
$ git config --global --list
```
##### प्रणाली कन्फिगरेसन देखनु:
```
$ git config --system --list
```
##### संस्करण इतिहास पूर्वावलोकन गर्दा क्रेडिटको लागि पहिचान योग्य नाम सेट गर्न:
```
$ git config --global user.name “[firstname lastname]”
```
##### एक इमेल ठेगाना सेट गर्न जुन हरेक इतिहास मार्करसँग सम्बन्धित हुनेछ:
```
$ git config --global user.email “[valid-email]”
```
##### सजिलो समीक्षाको लागि Git को लागि स्वचालित आदेश रेखा रंग सेट गर्न:
```
$ git config --global color.ui auto
```
##### प्रतिबद्धताको लागि वैश्विक सम्पादक सेट गर्न:
```
$ git config --global core.editor vi
```
<hr>
[##कन्फिगरेसन फाइलहरू](##कन्फिगरेसन-फाइलहरू)
##### भण्डार विशिष्ट कन्फिगरेसन फाइल [--local]:
```
$ <repo>/.git/config
```
##### प्रयोगकर्ता-विशिष्ट कन्फिगरेसन फाइल [--global]:
```
$ ~/.gitconfig
```
##### प्रणाली-विस्तृत विन्यास फाइल [--system]:
```
$ /etc/gitconfig
```
<hr>
[##सिर्जना](##सिर्जना)
##### अवस्थित भण्डार क्लोन गर्न:
त्यहाँ दुई तरिकाहरू छन्:
को द्वारा SSH
```
$ git clone ssh://user@domain.com/repo.git
```
को द्वारा HTTP
```
$ git clone http://domain.com/user/repo.git
```
##### नयाँ स्थानीय भण्डार सिर्जना गर्न:
```
$ git init
```
<hr>
[##स्थानीय परिवर्तनहरू](##स्थानीय-परिवर्तनहरू)
##### काम गर्ने निर्देशिकामा परिवर्तनहरू:
```
$ git status
```
##### ट्रयाक गरिएका फाइलहरूमा परिवर्तनहरू:
```
$ git diff
```
##### अर्को प्रतिबद्धताहरूमा सबै वर्तमान परिवर्तनहरू थप्नु:
```
$ git add .
```
##### & Lt; फाइल & gt; मा केहि परिवर्तनहरू थप्नु। अर्को प्रतिबद्धतामा:
```
$ git add -p <file>
```
##### ट्रयाक गरिएका फाइलहरूमा सबै स्थानीय परिवर्तनहरू प्रतिबद्ध गर्नु:
```
$ git commit -a
```
##### पहिलेको प्रतिबद्धता परिवर्तन भयो:
```
$ git commit
```
##### सन्देशसँग प्रतिबद्धता गर्न:
```
$ git commit -m 'message here'
```
##### स्टेजिंग क्षेत्र छोड्दै र सन्देश थप्न प्रतिबद्ध गर्न:
```
$ git commit -am 'message here'
```
##### केही अघिल्लो मितिमा प्रतिबद्धता गर्न:
```
$ git commit --date="`date --date='n day ago'`" -am "Commit Message"
```
##### अन्तिम प्रतिबद्धता परिवर्तन गर्न:<br>
<em><sub>प्रकाशित प्रतिबद्धताहरू संशोधन नगर्नुहोस्!</sub></em>
```
$ git commit -a --amend
```
##### अन्तिम प्रतिबद्धताको कमेटर मिति बदल्नु:
```
$ GIT_COMMITTER_DATE="date" git commit --amend
```
##### अन्तिम प्रतिबद्धताको मिति लेखक परिवर्तन गर्नु:
```
$ git commit --amend --date="date"
```
##### हालको शाखाबाट कुनै अन्य शाखामा असामान्य परिवर्तनहरू सार्नु:<br>
```
$ git stash
$ git checkout branch2
$ git stash pop
```
##### विफलता परिवर्तनहरू हालको शाखामा पुनःस्थापित गर्नु:
```
$ git stash apply
```
##### विफलताको अन्तिम सेट हटाउनु:
```
$ git stash drop
```
<hr>
[##खोजी](#खोजी)
##### डाइरेक्टरीमा सबै फाइलहरूमा पाठ खोज:
```
$ git grep "Hello"
```
##### पाठ खोजीको कुनैपनि संस्करणमा:
```
$ git grep "Hello" v2.5
```
<hr>
[###कमिटि-इतिहास](##कमिटि-इतिहास)
##### सबै कमिटिहरू देखाउनुहोस्, नयाँसँग सुरू गर्नुहोस् (यसले हैश, लेखक जानकारी, प्रतिबद्धताको मिति र प्रतिबद्धताको शीर्षक देखाउनेछ:
```
$ git log
```
##### सबै कमेन्टहरू देखाउनुहोस् (यसले केवल प्रतिबद्ध हैश र प्रतिबद्ध सन्देश देखाउनेछ):
```
$ git log --oneline
```
##### एक विशिष्ट प्रयोगकर्ताको सबै कमेन्टहरू देखाउनुहोस्:
```
$ git log --author="username"
```
##### विशिष्ट फाइलको लागि समयको साथ परिवर्तनहरू देखाउनुहोस्:
```
$ git log -p <file>
```
##### प्रदर्शन गर्दछ जुन केवल दायाँ तिर रिमोट / शाखामा उपस्थित छ
```
$ git log --oneline <origin/master>..<remote/master> --left-right
```
##### कसले परिवर्तन गर्यो, के र कहिले &lt;file&gt;:
```
$ git blame <file>
```
##### सन्दर्भ लगाउनुहोस्:
```
$ git reflog show
```
##### सन्दर्भ लग इन गर्नुहोस्:
```
$ git reflog delete
```
<hr>
[##शाखाहरू र ट्यागहरू](##शाखाहरू-र-ट्यागहरू)
##### सबै स्थानीय शाखाहरू सूचीबद्ध गर्नुहोस्:
```
$ git branch
```
##### सबै रिमोट शाखाहरू सूचीबद्ध गर्नुहोस्:
```
$ git branch -r
```
##### HEAD शाखा स्विच गर्नुहोस्:
```
$ git checkout <branch>
```
##### नयाँ शाखा बनाउनुहोस् र स्विच गर्नुहोस्:
```
$ git checkout -b <branch>
```
##### तपाईंको वर्तमान HEAD मा आधारित नयाँ शाखा सिर्जना गर्नुहोस्:
```
$ git branch <new-branch>
```
##### रिमोट शाखामा आधारित नयाँ ट्र्याकिङ शाखा सिर्जना गर्नुहोस्:
```
$ git branch --track <new-branch> <remote-branch>
```
##### स्थानीय शाखा मेटाउनुहोस्:
```
$ git branch -d <branch>
```
##### स्थानीय शाखालाई हटाउनुहोस्:
<em><sub>तपाईंले अनमर्जित परिवर्तन गुमाउनुहुनेछ!</sub></em>
```
$ git branch -D <branch>
```
##### ट्यागको साथ वर्तमान प्रतिबद्धता चिन्ह लगाउनुहोस्:
```
$ git tag <tag-name>
```
##### एक सन्देश समावेश गर्ने ट्यागको साथ वर्तमान प्रतिबद्धता चिन्ह लगाउनुहोस्:
```
$ git tag -a <tag-name>
```
<hr>
[##अपडेट र प्रकाशित](##अपडेट-र-प्रकाशित)
##### सबै हालको कन्फिगर गरिएको सम्झौताहरू सूचीबद्ध गर्नुहोस्:
```
$ git remote -v
```
##### टाढाको बारेमा जानकारी देखाउनुहोस्:
```
$ git remote show <remote>
```
##### नयाँ रिमोट भण्डार थप्नुहोस्, नाम & lt; रिमोट & gt ;:
```
$ git remote add <remote> <url>
```
##### & Lt; रिमोट & gt; बाट सबै परिवर्तनहरू डाउनलोड गर्नुहोस्, तर HEAD मा एकीकृत नगर्नुहोस्:
```
$ git fetch <remote>
```
##### परिवर्तनहरू डाउनलोड गर्नुहोस् र सीधा मा सीधा मर्ज / एकीकृत गर्नुहोस्:
```
$ git remote pull <remote> <url>
```
##### HEAD बाट सबै परिवर्तनहरू स्थानीय भण्डारमा प्राप्त गर्नुहोस्:
```
$ git pull origin master
```
<<<<<<< HEAD
=======
##### मर्ज बिना स्थानीय भण्डारमा सबै परिवर्तनहरू प्राप्त गर्नुहोस्:
```
git pull --rebase <remote> <branch>
```
##### रिमोटमा स्थानीय परिवर्तनहरू प्रकाशित गर्नुहोस्:
```
$ git push remote <remote> <branch>
```
##### रिमोटमा एक शाखा मेटाउनुहोस्:
```
$ git push <remote> :<branch> (since Git v1.5.0)
or
$ git push <remote> --delete <branch> (since Git v1.7.0)
```
##### तपाईंको ट्याग प्रकाशित गर्नुहोस्:
```
$ git push --tags
```
<hr>
[##मर्ज र विस्थापन](##मर्ज-र-विस्थापन )
##### तपाईंको वर्तमान HEAD मा <branch> मर्ज गर्नुहोस्:
```
$ git merge <branch>
```
##### तपाईंको वर्तमान HEAD लाई & lt; शाखामा & gt;:<br>
<em><sub>प्रकाशित प्रतिबद्धता रद्द नगर्नुहोस्!</sub></em>
```
$ git rebase <branch>
```
##### पुनर्स्थापना रद्द गर्नुहोस्:
```
$ git rebase --abort
```
##### संघर्ष समाधान पछि एक बिदा जारी राख्नुहोस्:
```
$ git rebase --continue
```
##### संघर्षहरू समाधान गर्न तपाईंको कन्फिगर गरिएको मर्ज उपकरण प्रयोग गर्नुहोस्:
```
$ git mergetool
```
##### म्यानुअल रूपमा विवाद समाधान गर्न तपाईंको सम्पादक प्रयोग गर्नुहोस् र (समाधान पछि) फाइलको रूपमा समाधानको रूपमा चिन्ह लगाउनुहोस्:
```
$ git add <resolved-file>
```
```
$ git rm <resolved-file>
```
##### स्क्वैशिंग काम गर्दछ:
```
$ git rebase -i <commit-just-before-first>
```
अब यो बदल्नुहोस्,
```
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
```
यो गर्न,
```
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
```
<hr>
[##पूर्ववत](##पूर्ववत)
##### तपाईंको काम गर्ने डाइरेक्टरीमा सबै स्थानीय परिवर्तनहरू खारेज गर्नुहोस्:
```
$ git reset --hard HEAD
```
##### टाढाको क्षेत्रबाट सबै फाईलहरू पाउनुहोस् (जसमा अन्तिम `git थप` अन्डु गर्नुहोस्):
```
$ git reset HEAD
```
##### विशिष्ट फाइलमा स्थानीय परिवर्तनहरू खारेज गर्नुहोस्:
```
$ git checkout HEAD <file>
```
##### एक प्रतिबद्धता उल्टाउनुहोस् (विपरीत परिवर्तनको साथ नयाँ प्रतिबद्धता उत्पादन गरेर):
```
$ git revert <commit>
```
##### तपाईंको HEAD सूचकलाई अघिल्लो प्रतिबद्धतामा रिसेट गर्नुहोस् र त्यसपछि सबै परिवर्तनहरू त्याग्नुहोस्:
```
$ git reset --hard <commit>
```
##### तपाईंको HEAD सूचक रिमोट शाखा हालको अवस्थामा रिसेट गर्नुहोस्।
```
git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
```
##### आफ्नो HEAD सूचकलाई अघिल्लो प्रतिबद्धतामा रिसेट गर्नुहोस् र अपस्टरेटेड परिवर्तनको रूपमा सबै परिवर्तनहरू सुरक्षित गर्नुहोस्:
```
$ git reset <commit>
```
##### तपाईंको HEAD सूचकलाई अघिल्लो प्रतिबद्धतामा रिसेट गर्नुहोस् र असामान्य स्थानीय परिवर्तनहरू सुरक्षित गर्नुहोस्:
```
$ git reset --keep <commit>
```
##### फाइलहरू हटाउनुहोस् जुन ग्यारेन्टीमा प्रतिबद्ध हुनुभन्दा पहिले गितग्रेन्डमा थपियो
```
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
```
<hr>
[##Git-Flow](#Git-Flow)
### अनुक्रमणिका
* [सेटअप](#सेटअप)
* [सुरु गर्दै](#सुरु-गर्दै)
* [विशेषताहरु](#विशेषताहरु)
* [रिलीज बनाउनुहोस्](#रिलीज-बनाउनुहोस्)
* [हटफिक्सहरू](#हटफिक्सहरू)
* [आदेशहरू](#आदेशहरू)
<hr>
[###सेटअप](###सेटअप)
- तपाईंलाई आवश्यकताको रूपमा काम गरिरहेको गिट स्थापनाको आवश्यकता छ। ओएसएक्स, लिनक्स र विन्डोजमा Git प्रवाह कार्य गर्दछ।
##### OSX Homebrew::
```
$ brew install git-flow
```
##### OSX Macports:
```
$ port install git-flow
```
##### Linux:
```
$ apt-get install git-flow
```
##### Windows (Cygwin):
तपाईलाई विजिट आवश्यक छ र git-flow स्थापना गर्न लिनक्सको प्रयोग प्रयोग गर्नुहोस्।
```
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```
<hr>
[### सुरु गर्दै](###सुरु-गर्दै)
- तपाईंको परियोजना सेटअप अनुकूलन गर्न Git को प्रवाह प्रारम्भ गर्न आवश्यक छ। अवस्थित गित भण्डार भित्रको प्रारम्भ गरेर गित-प्रवाह प्रयोग गरेर सुरु गर्नुहोस्:
- सुरू गर्नुहोस्:
- तपाइँका शाखाहरूका लागि नामकरण अधिवेशनको बारेमा केहि प्रश्नहरूको जवाफ दिनुपर्नेछ। यसलाई डिफल्ट मानहरू प्रयोग गर्न सिफारिस गरिएको छ।
```
git flow init
```
<hr>
[###विशेषताहरु](###विशेषताहरु)
- आगामी रिलीजहरूको लागि नयाँ सुविधाहरू विकास गर्नुहोस्। विकासकर्ताहरूमा सामान्य रूपमा मात्र अवस्थित हुन्छ।
- नयाँ सुविधा सुरू गर्नुहोस्:
- यो कार्यले 'विकास' मा आधारित नयाँ विशेषता शाखा सिर्जना गर्छ र यसलाई स्विच गर्दछ।
```
git flow feature start MYFEATURE
```
#### एक सुविधा समाप्त गर्नुहोस्:
एक सुविधाको विकास समाप्त गर्नुहोस्। यो कार्यले निम्न कार्य गर्दछ:
1. MYFEATURE लाई 'develop' मा मर्ज गरियो।
2. सुविधा शाखा हटाउँछ।
3. फिर्ता 'विकास' शाखामा स्विच गर्दछ
```
git flow feature finish MYFEATURE
```
#### एउटा सुविधा प्रकाशित गर्नुहोस्:
के तपाईं सहयोगमा एक सुविधा विकास गर्दै हुनुहुन्छ? टाढाको सर्भरमा एक सुविधा प्रकाशित गर्नुहोस् त्यसैले यो अन्य प्रयोगकर्ताहरूद्वारा प्रयोग गर्न सकिन्छ।
```
git flow feature publish MYFEATURE
```
##### एक प्रकाशित फिचर प्राप्त गर्दै:
अर्को प्रयोगकर्ता द्वारा प्रकाशित एक सुविधा प्राप्त गर्नुहोस्।
```
git flow feature pull origin MYFEATURE
```
##### मूल विशेषता ट्र्याक गर्दै:
तपाईंले मूलमा एउटा सुविधा ट्रयाक गर्न सक्नुहुन्छ
```
git flow feature track MYFEATURE
```
<hr>
### रिलीज बनाउनुहोस्
- नयाँ उत्पादन रिलीज को समर्थन को तैयारी। सानो बग समाधानका लागि अनुमति दिनुहोस् र रिलीजको लागि मेटा-डेटा तयार पार्नुहोस्
##### रिलीज सुरू गर्नुहोस्:
- रिलीज सुरू गर्न, गित प्रवाह रिलीज आदेश प्रयोग गर्नुहोस्। यसले 'develop' शाखाबाट निर्मित रिलीज शाखा बनाउँछ। तपाईले वैकल्पिक रुपमा [BASE] को शिल-1 हैशलाई रिलीज गर्न सुरू गर्न सक्नुहुनेछ। प्रतिबद्धहरू 'develop' शाखामा हुनुपर्दछ।
```
git flow release start RELEASE [BASE]
```
##### रिलीज शाखा प्रकाशित गर्न पछि यो अन्य विकासकर्ताद्वारा प्रतिबद्ध अनुमति दिन को लागी बुद्धिमानी हो। आदेशसँग प्रकाशन गर्ने सुविधासँग समान गर्नुहोस्:
```
git flow release publish RELEASE
```
- (तपाईं रिमोट रिलीज ट्रयाक गर्न सक्नुहुन्छ: ```git प्रवाह रिलीज ट्रयाक RELEASE``` कमांड)
##### रिलीज समाप्त गर्नुहोस्:
रिलीज समाप्त गर्दै गित शाखामा ठूलो चरणहरू मध्ये एक हो। यसले धेरै कार्यहरू गर्दछ:
1. रिलीज शाखा फिर्ता 'mmaster' मा मर्ज गर्दछ
2. यसको नाममा रिलीज ट्याग गर्नुहोस्
3. फिर्ता 'मा विकास' मा मर्ज गर्दछ
4. जारी शाखा हटाउँछ
```
git flow release finish RELEASE
```
आफ्नो ट्याग ```git push --tags``` सँग नबिर्सन
<hr>
### Hotfixes
हटफिक्सहरू प्रत्यक्ष उत्पादन संस्करणको अनावश्यक अवस्थामा तुरुन्तै कार्य गर्न आवश्यक हुन्छ। मास्टर शाखामा सम्बन्धित ट्यागबाट उत्पादन हुने संस्करणलाई चिन्ह लगाउन सकिन्छ।
##### Git प्रवाह हटफिक्स सुरु:
अन्य गिट प्रवाह आदेशहरू जस्तै, हटफिक्स सुरु भएको छ
```
$ git flow hotfix start VERSION [BASENAME]
```
यस संस्करणको आर्गुमेन्टले नयाँ हटफिक्स रिलीज नामलाई चिन्ह लगाउँदछ। वैकल्पिक रूपमा तपाइँबाट सुरु गर्न बेसेनम निर्दिष्ट गर्न सक्नुहुन्छ।
##### हटफिक्स समाप्त गर्नुहोस्:
हटफिक्स पूर्ण गरेर यसलाई यसलाई विकास र मास्टरमा मर्ज गरिएको हुन्छ। थप रूपमा मास्टर मर्ज हॉटफिक्स संस्करणको साथ ट्याग गरिएको छ
```
git flow hotfix finish VERSION
```
<hr>
### आदेशहरू
<p align="center">
<img alt="Git" src="../Img/git-flow-commands.png" height="270" width="460">
</p>
<hr>
### Git प्रवाह स्किमा
<p align="center">
<img alt="Git" src="../Img/git-flow-commands-without-flow.png">
</p>
<hr>
>>>>>>> copy
Git Cheat Sheet Turkish [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
===============
###Index
* [Oluşturma](#oluşturma)
* [Yerel Değişiklikler](#yerel-değişiklikler)
* [Arama](#arama)
* [Commit Geçmişi](#commit-geçmişi)
* [Branches & Tags(Etiketler)](#branches--tags)
* [Güncelleştirme & Yayınlama](#güncelleştirme--yayınlama)
* [Merge(Birleştirme) & Rebase](#merge--rebase)
* [Geri Alma](#geri-alma)
* [Git Flow](#git-flow)
<hr>
##Oluşturma
#####Var olan bir repositoryi(depoyu) klonlama:
```
$ git clone ssh://user@domain.com/repo.git
```
#####Yeni bir yerel repository(depo) oluşturma:
```
$ git init
```
<hr>
##Yerel Değişiklikler
#####Çalışılan dizindeki dosyaların değişimi:
```
$ git status
```
#####İzlenen dosyalardaki değişiklikler:
```
$ git diff
```
#####Tüm güncel değişiklikleri sonraki commite ekleme:
```
$ git add
```
#####Sonraki commite &lt;dosyasındaki&gt; bazı değişikleri ekleme:
```
$ git add -p <file>
```
#####Tüm izlenen dosyalardaki yerel değişiklikleri Commitleme:
```
$ git commit -a
```
#####Önceden hazırlanan değişiklikleri commitleme:
```
$ git commit
```
#####Mesaj ile commitleme:
```
$ git commit -m 'message here'
```
#####Önceki belli bir tarihe commitleme:
```
git commit --date="`date --date='n day ago'`" -am "Commit Message"
```
#####Son commiti değiştirme:<br>
######Yayınlanan commite değişiklik yapmayın!
```
$ git commit --amend
```
#####Mevcut branchteki kaydedilmemiş commitleri diğer bazı branchlere taşıma:
```
git stash
git checkout branch2
git stash pop
```
<hr>
##Arama
#####Bir metni dizindeki bütün dosyalarda aramak:
```
$ git grep "Merhaba"
```
#####Bir metni herhangi bir sürüm içinde aramak:
```
$ git grep "Merhaba" v2.5
```
<hr>
##Commit Geçmişi
#####Tüm commitleri en yenisinden başlayarak listeler:
```
$ git log
```
#####Tüm commitleri görüntüler(Sadece commit hash ve commit mesajı görüntülenir.):
```
$ git log --oneline
```
#####Belli kullanıcıya ait commitleri görüntüler:
```
$ git log --author="username"
```
#####Belirli bir dosya üzerinde zaman içinde meydana gelen değişiklikleri göstermektedir:
```
$ git log -p <file>
```
#####&lt;Dosyayı&gt; kim , ne ve ne zaman değiştirdiğini gösterir.:
```
$ git blame <file>
```
<hr>
##Branches & Tags
#####Tüm var olan branchleri listeler:
```
$ git branch
```
#####Ana branchi değiştirir:
```
$ git checkout <branch>
```
#####Mevcut ana branchte yeni bir branch oluşturur:
```
$ git branch <new-branch>
```
#####Remote branchte yeni bir izlenen branch oluşturur:
```
$ git branch --track <new-branch> <remote-branch>
```
#####Yerel branchi siler:
```
$ git branch -d <branch>
```
#####Güncel commiti etiket ile işaretler:
```
$ git tag <tag-name>
```
<hr>
##Güncelleştirme & Yayınlama
#####Yapılandırılmış tüm güncel remoteları listeler:
```
$ git remote -v
```
#####Belirli bir &lt;remote&gt; hakkında bilgileri gösterir.:
```
$ git remote show <remote>
```
#####Yeni remote repository oluşturur, &lt;remote&gt; diye isimlendirir:
```
$ git remote add <remote> <url>
```
#####&lt;Remote&gt; da bulunan tüm değişiklikleri indirir, ama ana brachle birleştirmez:
```
$ git fetch <remote>
```
#####Değişiklikleri indirir ve doğrudan ana brache merge/integrate eder:
```
$ git remote pull <remote> <url>
```
#####Tüm ana Branchteki değişiklikleri yerel repositorye ekler:
```
$ git pull origin master
```
#####Remote da bulunan repositorye(depoya), yerel değişiklikleri yayınlar:
```
$ git push remote <remote> <branch>
```
#####Remote da bulunan bir branchi siler:
```
$ git push <remote> :<branch> (since Git v1.5.0)
```
or
```
$ git push <remote> --delete <branch> (since Git v1.7.0)
```
#####Etiketleri yayınlar:
```
$ git push --tags
```
<hr>
##Merge & Rebase
#####Merge <branch> into your current HEAD:
```
$ git merge <branch>
```
#####Rebase your current HEAD onto &lt;branch&gt;:<br>
######Yayınlanan committen sonra rebase yapmayın!
```
$ git rebase <branch>
```
#####Rebase iptal etmek:
```
$ git rebase --abort
```
#####Çakışmaları çözümledikten sonra rebase devam etmek:
```
$ git rebase --continue
```
#####Çakışmaları çözmek için yapılandırılmış birleştirme aracını kullanmak:
```
$ git mergetool
```
#####Use your editor to manully solve conflicts and (after resolving) mark file as resolved:
```
$ git add <resolved-file>
```
```
$ git rm <resolved-file>
```
<hr>
##Geri Alma
#####Çalışılan dosyadaki tüm yerel değişiklikleri kaldırır:
```
$ git reset --hard HEAD
```
#####Evreleme alanı dışındaki tüm dosyaları alır(örnek: son git add'i geri alır):
```
$ git reset HEAD
```
#####Belli bir dosyadaki yerel değişiklikleri kaldırır:
```
$ git checkout HEAD <file>
```
#####Silinen dosyayı geri döndürme dosyanın commit loglarının tutuluyor olması ile mümkündür:
```
$ git revert <commit>
```
#####Reset your HEAD pointer to a previous commit and discard all changes since then:
```
$ git reset --hard <commit>
```
#####Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes:
```
$ git reset <commit>
```
#####Reset your HEAD pointer to a previous commit and preserve uncommitted local changes:
```
$ git reset --keep <commit>
```
<hr>
##Git-Flow
###Index
* [Ayarlar](#ayarlar)
* [Başlarken](#başlarken)
* [Özellikler (Features)](#features)
* [Bir Yayın Çıkarırken (Release)](#release)
* [Hata Giderimleri (Hotfixes)](#hata-giderimleri)
* [Komutlar (Commands)](#komutlar)
<hr>
###Ayarlar
######Git flow'u kullanabilmek için öncelikli olarak git kurulumunun yapılması gerekmektedir. Git flow OSX, Linux ve Windows üzerinde çalıştırılabilir.
#####OSX Homebrew:
```
$ brew install git-flow
```
#####OSX Macports:
```
$ port install git-flow
```
#####Linux:
```
$ apt-get install git-flow
```
#####Windows (Cygwin):
######Git flow kurulumu için wget ve util-linux gerekmektedir.
```
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```
<hr>
###Başlarken
######Git flow, kullanmak istediğiniz projede ayarlarınızı özelleştirmek amacıyla başlatılır (initialize).
#####Başlangıç (Initialize):
######Bu noktada kafanızda dallarınızı (branches) isimlendirme konusuna ilişkin birçok soru işareti oluşacaktır. Bu bağlamda varsayılan (default) değerleri kullanmanız önerilir.
######git flow'u kullanmak istediğiniz reponuzdayken:
```
git flow init
```
<hr>
###Özellikler (Features)
######Git flow ile yayınlamak üzere olduğunuz projenize ekleyeceğiniz özellikler için yeni dallarda (feature) kodlama yaparsınız. Genel olarak sadece geliştirici repolarında bulunurlar.
#####Yeni bir özellik eklemesi başlatmak (feature start):
######Yeni özelliklerin eklenmesi öncelikle develop dalından (branch) başlar.
```
git flow feature start MYFEATURE
```
###### Bu komut bize develop dalını (branch) temel alan bir özellik dalı (feature) oluşturur. Ve bulunduğumuz dalı develop/MYFEATURE olarak değiştirir.
#####Bir özellik eklemesi bitirilirken (feature finish):
######Bir özelliğin eklenme işlemi bitirilirken şunları yapılır:
######1)Kendi çalıştığımız özellik dalı (burada MYFEATURE) develop ana dalı ile birleştirilir.
######2)Bu birleşmeden sonra kendi özellik dalımız (MYFEATURE) silinir.
######3)Bulunduğumuz dal tekrar develop olarak değiştirilir.
```
git flow feature finish MYFEATURE
```
#####Bir özelliği yayınlamak (Publish a feature):
######Bir ekip içerisinde geliştirme mi yapıyorsunuz? O zaman geliştirdiğiniz özelliği bir uzak sunucuya gönderin, böylelikle geliştirdiğiniz özellik diğer kullanıcılar tarafından kullanılabilir.
```
git flow feature publish MYFEATURE
```
#####Yayınlanmış bir özelliği almak (Getting a published feature):
######Uzak sunucu üzerinde yayınlanmış bir özelliği kendi yerel (local) çalışma ortamınıza aktarırken:
```
git flow feature pull origin MYFEATURE
```
<hr>
###Bir Yayın Çıkarırken (Release)
######Yeni bir ürünün yayınlanmasına yardımcı olur. Küçük hata giderimleri ve meta-data hazırlığı için kullanılabilir.
#####Bir sürüm yayınlamak (Start a release):
######Bu komut ile develop dalını temel kabul eden bir release dalı (branch) yaratılır.
######Opsiyonel olarak yayınınızın [BASE] noktasından başlamasını sağlayabilirsiniz. Bu commit develop dalında (branch) iken yapılmalıdır.
```
git flow release start RELEASE [BASE]
```
######Yayınlama dalınız (release branch) oluştuktan sonra bu yöntem ile diğer yazılımcılar tarafından yapılan release commitlerinin de kabul edilmesini sağlayabilirsiniz. Bunu özellik yayınlama (feature publishing) ile kolaylıkla yapabilirsiniz.
```
git flow release publish RELEASE
```
######(Uzak sunucu üzerindeki yayınları ```git flow release track RELEASE``` ile izleyebilirsiniz. )
#####Bir sürüm yayınını tamamlamak(Finish up a release):
######Bir sürüm yayınını tamamlarken git dallanmasının (branching) en büyük adımını atarız. Yayınlanma tamamlanırken:
######1)Yayınlama yaptığımız dal olan release dalı (branch) master ana dalı ile birleştirilir.
######2)Etiketler (tags) isimleri ile birlikte yayınlanır.
######3)Arkaplandaki birleştirmeler (back-merges) develop dalında yayınlanır.
######4)Yayınlama için açmış olduğumuz dal (branch) silinir.
```
git flow release finish RELEASE
```
######Ancak etiketlerinizi de eklemeyi unutmayın! ```git push --tags``` bu sorununuzu da halledecektir.
<hr>
###Hata giderimleri (Hotfixes)
######Yayına çıkarılmış bir versiyonda istenmeyen durumlar ortaya çıktığında ani hata giderimi için kullanılır. Hotfixler, master ana dalı (branch)ındaki versiyon numarasını belirten etiketten dallanır (branching).
#####Bir hata giderimini başlatmak(git flow hotfix start):
######iğer git flow komutlarında olduğu gibi bir hotfix başlatılırken:
```
$ git flow hotfix start VERSION [BASENAME]
```
######Versiyon argümanları yeni hotfix yayınının adını alır. Opsiyonel olarak başlangıç noktası için bir isim özelleştirmesi yapabilirsiniz (basename).
#####Hata giderimi bitirme (Finish a hotfix):
######Bir hata giderimi tamamlanırken, develop ve master dalları ile birleştirilir. Ayrıca master dalına (branch) hotfix versiyonunun etiketi eklenir.
```
git flow hotfix finish VERSION
```
<hr>
###Komutlar (Commands)
<p align="center">
<img alt="Git" src="../Img/git-flow-commands.png" height="270" width="460">
</p>
<hr>
###Git flow şeması
<p align="center">
<img alt="Git" src="../Img/git-flow-commands-without-flow.png">
</p>
<hr>
# Git Cheat Sheet 中文版 [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
-----------------
<p align="center">
<img alt="Git" src="../Img/git-logo.png" height="190" width="455">
</p>
------------------
# Other Available Languages:
1. [Arabic Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-ar.md)
2. [Chinese Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-zh.md)
3. [Hindi Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-hi.md)
4. [Turkish Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-tr.md)
5. [Spanish Git Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-es.md)
Git cheat sheet 让你不用再去记所有的git命令。
欢迎贡献内容、更新语法错误,也欢迎添加你母语版本的Git cheat sheet。
---------------------
Git Cheat Sheet 中文版
=====================
###索引
* [配置](#配置)
* [配置文件](#配置文件)
* [创建](#创建)
* [本地修改](#本地修改)
* [搜索](#搜索)
* [提交历史](#提交历史)
* [分支与标签](#分支与标签)
* [更新与发布](#更新与发布)
* [合并与重置](#合并与重置)
* [撤销](#撤销)
* [Git Flow](#git-flow)
---
###配置
##### 列出当前配置:
```
$ git config --list
```
##### 列出repository配置:
```
$ git config --local --list
```
##### 列出全局配置:
```
$ git config --global --list
```
##### 列出系统配置:
```
$ git config --system --list
```
##### 设置用户名:
```
$ git config --global user.name “[firstname lastname]”
```
##### 设置用户邮箱:
```
$ git config --global user.email “[valid-email]”
```
##### 设置git命令输出为彩色:
```
$ git config --global color.ui auto
```
##### 设置git使用的文本编辑器设:
```
$ git config --global core.editor vi
```
---------
###配置文件
##### Repository配置对应的配置文件路径[--local]:
```
<repo>/.git/config
```
##### 用户全局配置对应的配置文件路径[--global]:
```
~/.gitconfig
```
##### 系统配置对应的配置文件路径[--local]:
```
/etc/gitconfig
```
----------
###创建
##### 复制一个已创建的仓库:
```bash
# 通过 SSH
$ git clone ssh://user@domain.com/repo.git
#通过 HTTP
$ git clone http://domain.com/user/repo.git
```
##### 创建一个新的本地仓库:
```
$ git init
```
---
###本地修改
##### 显示工作路径下已修改的文件:
```
$ git status
```
##### 显示与上次提交版本文件的不同:
```
$ git diff
```
##### 把当前所有修改添加到下次提交中:
```
$ git add .
```
##### 把对某个文件的修改添加到下次提交中:
```
$ git add -p <file>
```
##### 提交本地的所有修改:
```
$ git commit -a
```
##### 提交之前已标记的变化:
```
$ git commit
```
##### 附加消息提交:
```
$ git commit -m 'message here'
```
##### 提交,并将提交时间设置为之前的某个日期:
```
git commit --date="`date --date='n day ago'`" -am "Commit Message"
```
##### 修改上次提交
<em><sub>请勿修改已发布的提交记录!</sub></em>
```
$ git commit --amend
```
##### 修改上次提交的committer date:
```
GIT_COMMITTER_DATE="date" git commit --amend
```
##### 修改上次提交的author date:
```
git commit --amend --date="date"
```
##### 把当前分支中未提交的修改移动到其他分支:
```
git stash
git checkout branch2
git stash pop
```
##### 将 stashed changes 应用到当前分支:
```
git stash apply
```
##### 删除最新一次的 stashed changes:
```
git stash drop
```
---
###搜索
##### 从当前目录的所有文件中查找文本内容:
```
$ git grep "Hello"
```
##### 在某一版本中搜索文本:
```
$ git grep "Hello" v2.5
```
---
###提交历史
##### 从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间):
```
$ git log
```
##### 显示所有提交(仅显示提交的hash和message):
```
$ git log --oneline
```
##### 显示某个用户的所有提交:
```
$ git log --author="username"
```
##### 显示某个文件的所有修改:
```
$ git log -p <file>
```
##### 仅显示远端<remote/master>分支与远端<origin/master>分支提交记录的差集:
```
$ git log --oneline <origin/master>..<remote/master> --left-right
```
##### 谁,在什么时间,修改了文件的什么内容:
```
$ git blame <file>
```
##### 显示reflog:
```
$ git reflog show
```
##### 删除reflog:
```
$ git reflog delete
```
---
###分支与标签
##### 列出所有的分支:
```
$ git branch
```
##### 列出所有的远端分支:
```
$ git branch -r
```
##### 切换分支:
```
$ git checkout <branch>
```
##### 创建并切换到新分支:
```
$ git checkout -b <branch>
```
##### 基于当前分支创建新分支:
```
$ git branch <new-branch>
```
##### 基于远程分支创建新的可追溯的分支:
```
$ git branch --track <new-branch> <remote-branch>
```
##### 删除本地分支:
```
$ git branch -d <branch>
```
##### 强制删除一个本地分支:<br>
<em><sub>将会丢失未合并的修改!</sub></em>
```
$ git branch -D <branch>
```
##### 给当前版本打标签:
```
$ git tag <tag-name>
```
##### 给当前版本打标签并附加消息:
```
$ git tag -a <tag-name>
```
---
###更新与发布
##### 列出当前配置的远程端:
```
$ git remote -v
```
##### 显示远程端的信息:
```
$ git remote show <remote>
```
##### 添加新的远程端:
```
$ git remote add <remote> <url>
```
##### 下载远程端版本,但不合并到HEAD中:
```
$ git fetch <remote>
```
##### 下载远程端版本,并自动与HEAD版本合并:
```
$ git remote pull <remote> <url>
```
##### 将远程端版本合并到本地版本中:
```
$ git pull origin master
```
##### 以rebase方式将远端分支与本地合并:
```
git pull --rebase <remote> <branch>
```
##### 将本地版本发布到远程端:
```
$ git push remote <remote> <branch>
```
##### 删除远程端分支:
```
$ git push <remote> :<branch> (since Git v1.5.0)
or
git push <remote> --delete <branch> (since Git v1.7.0)
```
##### 发布标签:
```
$ git push --tags
```
---
###合并与重置(Rebase)
##### 将分支合并到当前HEAD中:
```
$ git merge <branch>
```
##### 将当前HEAD版本重置到分支中:
<em><sub>请勿重置已发布的提交!</sub></em>
```
$ git rebase <branch>
```
##### 退出重置:
```
$ git rebase --abort
```
##### 解决冲突后继续重置:
```
$ git rebase --continue
```
##### 使用配置好的merge tool 解决冲突:
```
$ git mergetool
```
##### 在编辑器中手动解决冲突后,标记文件为`已解决冲突`:
```
$ git add <resolved-file>
```
```
$ git rm <resolved-file>
```
##### 合并提交:
```
$ git rebase -i <commit-just-before-first>
```
把上面的内容替换为下面的内容:
原内容:
```
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
```
替换为:
```
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
```
---
###撤销
##### 放弃工作目录下的所有修改:
```
$ git reset --hard HEAD
```
##### 移除缓存区的所有文件(i.e. 撤销上次`git add`):
```
$ git reset HEAD
```
##### 放弃某个文件的所有本地修改:
```
$ git checkout HEAD <file>
```
##### 重置一个提交(通过创建一个截然不同的新提交)
```
$ git revert <commit>
```
##### 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改:
```
$ git reset --hard <commit>
```
##### 用远端分支强制覆盖本地分支:
```
git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
```
##### 将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改:
```
$ git reset <commit>
```
##### 将HEAD重置到上一次提交的版本,并保留未提交的本地修改:
```
$ git reset --keep <commit>
```
##### 删除添加`.gitignore`文件前错误提交的文件:
```
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
```
---
##Git-Flow
###索引
* [安装](#安装)
* [开始](#开始)
* [特性](#特性)
* [做一个release版本](#做一个release版本)
* [紧急修复](#紧急修复)
* [Commands](#commands)
---
###安装
- 你需要有一个可以工作的 git 作为前提。
- Git flow 可以工作在 OSX, Linux 和 Windows之下
##### OSX Homebrew:
```
$ brew install git-flow
```
##### OSX Macports:
```
$ port install git-flow
```
##### Linux:
```
$ apt-get install git-flow
```
##### Windows (Cygwin):
安装 git-flow, 你需要 wget 和 util-linux。
```
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```
----
###开始
- 为了自定义你的项目,Git flow 需要初始化过程。
- 使用 git-flow,从初始化一个现有的 git 库内开始。
- 初始化,你必须回答几个关于分支的命名约定的问题。建议使用默认值。
```
git flow init
```
---
###特性
- 为即将发布的版本开发新功能特性。
- 这通常只存在开发者的库中。
##### 创建一个新特性:
下面操作创建了一个新的feature分支,并切换到该分支
```
git flow feature start MYFEATURE
```
##### 完成新特性的开发:
完成开发新特性。这个动作执行下面的操作:
1. 合并 MYFEATURE 分支到 'develop'
2. 删除这个新特性分支
3. 切换回 'develop' 分支
```
git flow feature finish MYFEATURE
```
##### 发布新特性:
你是否合作开发一项新特性?
发布新特性分支到远程服务器,所以,其它用户也可以使用这分支。
```
git flow feature publish MYFEATURE
```
##### 取得一个发布的新特性分支:
取得其它用户发布的新特性分支。
```
git flow feature pull origin MYFEATURE
```
##### 追溯远端上的特性:
通过下面命令追溯远端上的特性
```
git flow feature track MYFEATURE
```
---
###做一个release版本
- 支持一个新的用于生产环境的发布版本。
- 允许修正小问题,并为发布版本准备元数据。
##### 开始创建release版本:
- 开始创建release版本,使用 git flow release 命令。
- 'release' 分支的创建基于 'develop' 分支。
- 你可以选择提供一个 [BASE]参数,即提交记录的 sha-1 hash 值,来开启动 release 分支。
- 这个提交记录的 sha-1 hash 值必须是'develop' 分支下的。
```
git flow release start RELEASE [BASE]
```
创建 release 分支之后立即发布允许其它用户向这个 release 分支提交内容是个明智的做法。命令十分类似发布新特性:
```
git flow release publish RELEASE
```
(你可以通过
`git flow release track RELEASE` 命令追溯远端的 release 版本)
##### 完成 release 版本:
完成 release 版本是一个大 git 分支操作。它执行下面几个动作:
1. 归并 release 分支到 'master' 分支。
2. 用 release 分支名打 Tag
3. 归并 release 分支到 'develop'
4. 移除 release 分支。
```
git flow release finish RELEASE
```
不要忘记使用`git push --tags`将tags推送到远端
---
###紧急修复
紧急修复来自这样的需求:生产环境的版本处于一个不预期状态,需要立即修正。有可能是需要修正 master 分支上某个 TAG 标记的生产版本。
##### 开始 git flow 紧急修复:
像其它 git flow 命令一样, 紧急修复分支开始自:
```
$ git flow hotfix start VERSION [BASENAME]
```
VERSION 参数标记着修正版本。你可以从 `[BASENAME]开始,`[BASENAME]`为finish release时填写的版本号
##### 完成紧急修复:
当完成紧急修复分支,代码归并回 develop 和 master 分支。相应地,master 分支打上修正版本的 TAG。
```
git flow hotfix finish VERSION
```
---
###Commands
<p align="center">
<img alt="Git" src="../Img/git-flow-commands.png" height="270" width="460">
</p>
<hr>
###Git flow schema
<p align="center">
<img alt="Git" src="../Img/git-flow-commands-without-flow.png">
</p>
<hr>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment