git 命令行使用

将更新的代码加入版本库管理

git commit -a -m "description"

从本地git仓库获取指定文件

git checkout 文件名称
例如:git checkout drthelp.php
git init    创建仓库

git clone <repo>   <directory>   克隆仓库
repo:仓库地址
directory:本地目录

将版本库代码推送到代码库

git push

git push命令用于将本地分支的更新,推送到远程主机
git push <远程主机名> <本地分支名>:<远程分支名>
git push pb master:master
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,
而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push <远程主机名> <本地主分支>
git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :master
# 等同于
git push origin --delete master

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。(如何建立追踪关系)
git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
git push -u <远程主机名> <远程分支名>
git push -u origin master
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
git push -u origin master:develop    将本地的master分支推送到origin主机的develop分支,同时指定origin为默认主机

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。
git config --global push.default matching
# 或者
git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。
git push --all origin
上面命令表示,将所有本地分支都推送到origin主机

最后,git push不会推送标签(tag),除非使用–tags选项。
git push origin --tags

有时候当远程xxx分支被删掉了后,用git branch -a 你还可以看到本地还有remote/origin/xxx这个分支,那么你可以使用git fetch -p 这个命令可以帮你同步最新的远程分支,并删掉本地被删了的远程分支



查看git状态

git status
git status -s    查看简介状态
git add filename.php    将filename.php文件添加到git仓库
git add .                        添加所有新文件
git diff              (尚未缓存的改动)

git diff --cached  (查看已缓存的改动)

git diff HEAD      (查看已缓存的与未缓存的所有改动)

git diff --stat    (显示摘要而非整个 diff)

1.1 比较工作区与暂存区
git diff 不加参数即默认比较当前分支工作区与暂存区
例:
git diff Application/Cron/Controller/AoshitestController.class.php
git diff -- Application/Cron/Controller/AoshitestController.class.php

1.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff --cached [<path>]
例:
git diff --cached Application/Cron/Controller/AoshitestController.class.php

1.3 比较工作区与最新本地版本库
git diff HEAD [<path>...]  如果HEAD指向的是master分支,那么HEAD还可以换成master
例:
git diff HEAD  Application/Cron/Controller/AoshitestController.class.php

1.4 比较工作区与指定commit-id的差异
git diff commit-id  [<path>...] 
例:
git diff 69659d7 Application/Cron/Controller/AoshitestController.class.php

1.5 比较暂存区与指定commit-id的差异
git diff --cached [<commit-id>] [<path>...] 
例:
git diff --cached 69659d7 Application/Cron/Controller/AoshitestController.class.php


1.6 比较两个commit-id之间的差异
git diff [<commit-id>] [<commit-id>]
例如:
git diff 6805ee9 6e7169b Application/Cron/Controller/AoshitestController.class.php 指定文件版本差异
git diff 6805ee9 6e7169b Application/    指定目录版本差异
git diff 6805ee9 6e7169b    版本差异

1.7 使用git diff打补丁
git rm  <file>    删除文件(该命令会删除工作区和暂存区的文件)
git rm -f  <file>    删除文件(该命令会删除之前修改过并且存放在暂存区的文件<工作区 和 暂存区的文件都会被删除>)
git rm  a.txt           git rm -f a.txt

git rm --cached <file>    删除文件(该命令会删除暂存区的文件)
git rm --cached a.txt

git rm -r *|目录名      递归删除文件或目录
git rm -r *
git rm -r static
git mv <old file> <new file>    用于重新命名文件 (工作区和暂存区)
git mv a.txt a.md          将a.txt名称修改为 a.md
git reset HEAD -- <file>       取消已缓存的内容
git reset HEAD -- a.txt            取消更新的缓存

git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到 指定commit的sha码

git 添加忽略文件
方案1:
要忽略的文件在加入git版本库之前,在项目根目录添加.gitignore文件,里面添加忽略的文件,每行一类或一个
如果要强制添加忽略的文件 git add -f 文件名
方案2:(使用过)
git仓库根目录有一个 .ignore 文件,在.ignore文件中添加要忽略的文件,每行一个

1)/mtk/               过滤仓库内整个文件夹  mtk
2)*.zip                过滤仓库内所有.zip文件
3)/mtk/do.c         过滤仓库内某个具体文件 do.c
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。

需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:
1)!*.zip
2)!/mtk/one.txt
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦。解决方法:(需要删除要忽略的文件,然后更新git仓库,git push  ,然后再添加忽略的文件,修改忽略文件(.ignore))

.gitignore配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为版本管理带来很大的便利,以下是对于配置.gitignore的一些心得记录:
1)配置语法:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

2)示例说明
a)规则:fd1/*
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
b)规则:/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
c)规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;

git rm --cached Application/Common/Conf/config.php 删除文件 只从暂存区删除
git rm 文件名 删除文件 从暂存区和工作区删除
git rm 文件名 删除文件 从暂存区和工作区删除
git rm -f 文件名 强行移除修改后文件(从暂存区和工作区中删除)

查看分支

git branch -a    查看所有分支
git branch -l    查看本地所有分支
git branch -r    查看远程所有分支
git branch -vv  查看本地分支和远程分支的关系

分支管理

git branch <branchname>       创建分支命令 
git branch mybranch               创建mybranch分支

git checkout <branchname>    切换分支命令
git checkout mybranch            切换到mybranch分支

git branch -d  <branchname>    删除分支
git branch -D  <branchname>    强制删除分支
git branch -d mybranch            删除mybranch分支

git merge  <branchname>          合并分支
git merge mybranch      //将mybranch分支合并到主分支去

建立当前分支与远程分支的映射关系:
git branch -u origin/master     表示当前分支对应远程 origin/master分支
或
git branch --set-upstream-to origin/master   关联远程分支  表示当前分支对应远程 origin/master分支

git branch -r                  查看所有远程分支

git fetch origin 远程分支名x:本地分支名x    拉取远程分支 (使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。采用此种方法建立的本地分支不会和远程分支建立映射关系。)
git checkout -b 本地分支名x origin/远程分支名x (使用该方式会在本地新建分支x,并自动切换到该本地分支x。采用此种方法建立的本地分支会和远程分支建立映射关系。)

远程仓库的使用

添加远程仓库
git remote add <repository name(仓库名称)> <repository url(仓库地址)>
git remote add pb https://github.com/skyaoshi/as_test1.git

修改仓库地址
git remote set-url <repository name(仓库名称)> <repository url(仓库地址)>
git remote set-url origin https://github.com/skyaoshi/as_test1.git

储存 git stash

1. git stash save "save message"   执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
2. git stash list  :查看stash了哪些存储
3. git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
4. git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p
5. git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 
6. git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
8. git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
9. git stash clear :删除所有缓存的stash

注意 : 说明:新增的文件,直接执行stash是不会被存储的 (没有在git 版本控制中的文件,是不能被git stash 存起来的。)

查看日志

git log                  显示日志
git log -p  -[num] 显示最近几条提交的日志(包含修改的内容)

中文日志乱码修复
git bash 中输入下面命令

git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8

git 还原版本
还原版本时要选中某个文件,将该文件还原到这个版本号(默认是将此次提交的所有文件恢复到该版本)

让git记住账号密码

[credential]
     helper = store

回到合并之前

git branch list
    master
    pre_prod *
 
合并master分支
git merge master

出现冲突 回到合并之前
git merge --abort

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容