Git note

feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变更)注意不是 css 修改
refactor:重构(即不是新增功能,也不是修改bug的代码变更)
test:增长测试
chore:构建过程或辅助工具的变更
scope: commit 影响的范围, 好比: route, component, utils, build...
footer: 一些备注, 一般是 BREAKING CHANGE 或修复的 bug 的连接.

init_add_status_commit_pushcss

基础概念html

已提交(committed):已提交表示该文件已经被安全地保存在本地数据库中了;git

已修改(modified):已修改表示修改了某个文件,但尚未提交保存;github

已暂存(staged):已暂存表示把已修改的文件放在下次提交时要保存的清单中。shell

初次运行基本配置

用户信息数据库

$ git config --global user.name "Teaism"
$ git config --global user.email chenliangf1223@sina.comvim

配置文本编辑器segmentfault

$ git config --global core.editor emacs安全

查看配置信息服务器

$ git config --list

查阅某个环境变量的设定

$ git config user.name

删除某个配置项

$ git config (--local、--global、--system) --unset user.name

Git使用命令

获取帮助

$ git help config

初始化Git仓库

$ git init

从现有仓库克隆

$ git clone git://github.com/schacon/grit.git NewFileName

添加文件到仓库

$ git add Files

建立.ignore文件

$ touch .gitignore

删除文件(禁用:会从工做目录和暂缓中同时删除。)

$ git rm Files

$ git add -A (推荐)
它会把咱们未经过 git rm 删除的文件所有stage

重命名文件

$ git mv file_from file_to

检查当前文件状态

$ git status

提交已暂存区(stage)的内容

$ git commit -m '提交说明'

查看日志

$ git log (--pretty=oneline)

** 查看文件差异

$ git diff #是工做区(work dict)和暂存区(stage)的比较
$ git diff --cached #是暂存区(stage)和版本库的比较

$ git diff HEAD -- Files #工做区和版本库的区别

** 撤销修改
[https://segmentfault.com/a/1190000007070302]
tips:命令 git checkout –readme.txt 意思就是,把readme.txt文件在工做区作的修改所有撤销,这里有2种状况,以下:
1) readme.txt自动修改后,尚未放到暂存区,使用 撤销修改就回到和版本库如出一辙的状态。
2) 另一种是readme.txt已经放入暂存区了,接着又做了修改,撤销修改就回到添加暂存区后的状态。

工做区的代码想撤销 ( Files 自修改后尚未被放到暂存区,如今,撤销修改就回到和版本库如出一辙的状态;)

$ git checkout -- Files (git checkout -- . 撤销全部文件,注意 ' . ')

add到暂存区的代码想撤销 (Files 已添加到暂存区后,又修改,如今,撤销修改就reset回到添加到暂存区后的状态。再checkout就是恢复到 版本库同样的)

$ git reset HEAD Filesname (git reset HEAD . 将全部文件)

$ git checkout -- Files

删除文件恢复
删除文件 $ git rm [Filenames] or rm [Filenames]
只要没有commit以前,若是我想在版本库中恢复此文件,可使用以下命令:
$ git checkout — b.txt

版本回退(未提交到远程可回退,不然可本地回退再push到远程覆盖)

notes: reset指针直接指向上次提交(慎用),revert 是从新提交(推荐)。
$ git reflog OR $ git log --pretty=oneline (查看提交历史)。

$ git reset --hard [hash] (推荐这个,hash) OR $ git reset --hard HEAD@{$} ($向前回退几个版本)

穿梭前,用git log能够查看提交历史,以便肯定要回退到哪一个版本。

要重返将来,用git reflog查看命令历史,以便肯定要回到将来的哪一个版本。

从暂缓区删除文件(但工做区代码并未删除)

$ git rm --cached

GIT重置命令

reset命令能够改变.git/refs/heads/master下分支的引用,而不是永远指向最新的提交ID。

reflog(.git/logs/refs/heads/master)命令恢复

重置引用后提交历史信息会丢失,这时可使用reflog命令查看操做日志,以便进行恢复操做

git reflog show master |head -5 显示master分之最近五次操做日志

git reflog -1 显示HEAD分支最近一次操做日志

reset命令的两种用法

用法一:git reset[-q][<commit>][--]<paths>

用法二:git reset[--soft|--mixed|--hard|--merge|--keep][-q][<commit>]

第一种用法不会重置引用和工做区,而是用commit下的文件替换暂存区文件,至关于撤销git add 的操做,其中commit能够省略,默认为HEAD

第二种则会重置引用,但会根据不一样的参数从而 影响 工做区或者暂存区,其中commit也能够省略,默认为HEAD

使用参数--hard 工做区,引用、暂存区所有替换为commit

使用参数--soft 只更改引用,工做区和暂存区不影响
使用参数--mixed(不写默认) 只更改引用和暂存区,不影响工做区

git 分支

建立并切换到新的分支

$ git checkout -b
至关于:
$ git branch (新建分支)
$ git checkout (切换分支)

查看分支列表

$ git Branch

合并分支

合并Master 和 Branch1 分支:

$ git checkout Master
$ git merge Branch1

合并分支时同一文件同一部分冲突

此时须要到文件中手动保留须要的部分,而后add--commit。

删除分支( D 表示强制删除)

$ git branch -d ...

$ git branch -D ...

查看分支的合并状况

$ git log (--graph --pretty=oneline --abbrev-commit)

禁用快捷合并分支

$ git merge --no-ff -m "comments"

查看全部分支(分支颜色区分:白色-本地,绿色-当前,红色-远程)
$ git branch -a
切换远程分支
$ git checkout remotes/origin/master
删除远程分支
$ git branch -r -d
$git push origin -d
拉取远程分支并建立为本地分支
$ git fetch origin dev:dev

修复Bug分支

Explain:

修复bug时,咱们会经过建立新的bug分支进行修复,而后合并,最后删除;

当手头工做没有完成时,先把工做现场git stash一下,而后去修复bug,修复后,再git stash pop,回到工做现场。

steps: (以master,dev,bug01分支为例):

储存dev当前工做区: $ git stash
切换到master分支上:
新建并切换分支bug01: $ git checkout -b
在新的bug01分支上修复,记得提交;
把bug01分支合并到master分支上,推荐'禁用快捷合并'方式:$ git merge --no-ff -m "comments" 到此bug修复成功。下面是回到先前的工做区:
切换到dev分支上
查看先前“储存‘的工做区: $ git stash list
恢复到指定处: $ git stash apply stash@{$}
成功!

$ git stash //把当前工做现场“储藏”起来,等之后恢复现场后继续工做
$ git stash list //列出stash中的全部暂存的内容

方式一:git stash apply //仅恢复,;
$ git stash apply stash@{$} //还能够指定恢复哪个,stash内容并不删除
$ git stash drop //来删除,stash(可是不肯定删除哪一个??)

方式二:git stash pop //恢复的同时把stash内容也删了(推荐)

参考: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000

bug排查

$ git bisect

打标签

查看已有标签列表

$ git tag

新增标签

$ git tag -a v1.2.0 -m 'my version 1.2.0'

后期加注标签

$ git tag -a v1.2.0 9fceb02 (9fceb02为提交时校验和前几位)

推进单个标签到远程服务器

$ git push origin v1.2.0

推进全部标签到远程服务器

$ git push origin --tags

退出vim编辑器:双击 D ,按了ESC后输入命令 :wq!

修改后 保存: ESC :wq 回车键
修改后 不保存:ESC :q 回车键

单单 git diff 不过是显示尚未暂存起来的改动,若要看已经暂存起来的文件和上次提交时的快照之间的差别,能够用 git diff --staged;

Git远程关联管理

**远程操做的第一步,最好从远程主机克隆一个版本库: git clone. 否则容易出现 not shell access

clone-pull-fetch-push

测试远程仓库连接是否成功

$ ssh -T git@github.com

测试443端口是否可用

$ ssh -T -p 443 git@ssh.github.com

添加远程仓库

$ git remote add origin git@github.com:Teaism/gitremote.git

展现远程仓库信息

$ git remote show mcvideo(别名)

查看当前远程仓库

$ git remote -v

推送到远程仓库

$ git pull origin master/dev (第一次推送以前需拉取远程的)

$ git push -u origin master

$ git push origin master (之后的推送)

**代码合并【注:pull=fetch+merge(拉取并合并=拉取+合并)](最好不要直接用pull,而是分开用) 。

$ git pull (mcvideo master) 无括号里表示拉取全部并合并

$ git fetch (mcvideo master) 无括号里表示拉取全部

$ git merge dev (合并dev到当前分支)

直接从远程origin的dev分支建立到本地dev来:

$ git checkout –b dev origin/dev

$ git pull origin master/dev/test 从远程仓库拉取指定分支
tips: git pull若是失败了,缘由是没有指定本地dev分支与远程origin/dev分支的连接,根据提示,设置dev和origin/dev的连接:
$ git branch --set-upstream dev origin/dev (// 本地远程分支关联: git branch --set-upstream-to=origin/ <远程分支名> <本地分支名> 如设置当前分支,第二个参数可省略,;)
origin: 如未指定,表示远程仓库的别名
合并pull两个不一样的项目:
报错:fatal: refusing to merge unrelated histories
解决方法:git pull origin master --allow-unrelated-histories

冲突:
一、放弃工做区修改,
本地仓库代码彻底覆盖本地工做区间,具体指令以下:
$ git checkout head .
(注意: 别遗漏 "head" 后的 " ." )
而后更新远程仓库的代码就不会出现冲突了:
$ git pull
二、解决冲突后提交本地修改
$ git stash
$ git stash save "这些是注释啦"
$ git pull
$ git stash pop
手工解决冲突,
而后add-commit-push

删除远程分支
$ git push origin --delete Branchname

远程仓库的重命名和删除

$ git remote rename pb paul

$ git remote rm paul

从commit里取消去某个文件夹的跟踪

git rm -r --cached path_to_your_folder/

## 合并几个commit

[http://zerodie.github.io/blog/2012/01/19/git-rebase-i/]

git merge 和 git rebase 的区别: [http://blog.csdn.net/wh_19910525/article/details/7554489]

$ git rebase -i commit-hash(不改变的那个)
进入vim
pick 的意思是要会执行这个 commit (第二新提交)
squash 的意思是这个 commit 会被合并到前一个commit (最新提交,合并到第二新提交)

Esc:wq ,保存并退出。成功。
git log --pretty=oneline 查看结果。
如操做错误随时终止 $ git rebase --abort,会回到未开始合并以前的状态。

git pull # 抓取远程仓库全部分支更新并合并到本地

git pull --no-ff # 抓取远程仓库全部分支更新并合并到本地,不要快进合并

git fetch origin # 抓取远程仓库更新

git merge origin/master # 将远程主分支合并到本地当前分支

git co --track origin/branch # 跟踪某个远程分支建立相应的本地分支

git co -b origin/ # 基于远程分支建立本地分支,功能同上

git push # push全部分支

git push origin master # 将本地主分支推到远程主分支

git push -u origin master # 将本地主分支推到远程(如无远程主分支则建立,用于初始化远程仓库)

git push origin # 建立远程分支, origin是远程仓库名

git push origin : # 建立远程分支

git push origin : #先删除本地分支(git br -d ),而后再push删除远程分支

Git远程仓库管理

GitHub

git remote -v # 查看远程服务器地址和仓库名称

git remote show origin # 查看远程服务器仓库状态

git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址

git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm # 删除远程仓库

建立远程仓库

git clone --bare robbin_site robbin_site.git # 用带版本的项目建立纯版本仓库

scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上

mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器建立纯仓库

git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址

git push -u origin master # 客户端首次提交

git push -u origin develop # 首次将本地develop分支提交到远程develop分支,而且track

git remote set-head origin master # 设置远程仓库的HEAD指向master分支

也能够命令设置跟踪远程库和本地库

git branch --set-upstream master origin/master

git branch --set-upstream develop origin/develop

参考:[http://www.cnblogs.com/cspku/articles/Git_cmds.html]

[http://shaofan.org/git/]

相关文章
相关标签/搜索