Git开发必备指令

1、Linux基础指令

cd .. //返回上级目录
cd d: //进入d盘
ls -al //查看文件列表
cat dome.txt //查看文件
touch dome.txt //创建文件
rm dome.txt //删除文件
vim 文件名 //编辑文件

2、git的基本概念

Workspace:工作区
Index / Stage:暂存区(缓存区)
Repository:仓库区(或本地仓库)
Remote:远程仓库

2.1 git 初始化

git的初始化有两种,一种是还没有仓库自己新建,使用git init 初始化仓库;
一种是已经有仓库了,通过git clone 拉取仓库到本地。

git init //当前目录下初始一个仓库,多一个.git的隐藏文件夹
git config --global user.name 'lisan' //配置本地仓库用户名
git config --global user.email 'lisan@email.com' //配置本地仓库用户邮件
或者
git clone <path> //克隆gitcode
git remote add [shortname] [url] //添加远程库

例子:
克隆远程仓库
 $ git clone git://github.com/schacon/grit.git
关联远程仓库
 $ git remote add origin https://github.com/user/repo.git

补充:config的几种作用域
global 用户权限
system 系统权限
local 当前目录权限

2.2、git基础指令-添加、提交、查看、删除、回退

a、添加

基本操作略...

git add read.md //添加文件到缓存区
git add . //该目录下所有文件添加到缓存区
git add -a //项目内全部文件添加到缓存区

b、提交

基本操作略...

git commit -m "mrak" //提交本地仓库
git commit -am "mark" //提交本地仓库、与上面不同的是我们可以少了git add操作(只限于已经存在于缓存区的文件,也就是说如果你新建了个test文件,如果没git add,这里不会提交到仓库,还是老老实实add后commit。)
git commit --amend //修改最后一次提交commit的msg

c、查看

基本操作略...

git log -n 查看最近n次改动(常用)
git log --oneline //简洁记录
git log --graph //图形化显示commit
git log --reverse --oneline //反向查看记录
git log --oneline --graph //历史中出现了分支、合并
git status //查看文件状态(常用)
git status -s //查看状态 简洁模式

d、删除

基本操作略...

git checkout read.md //回复工作区文件内容到仓库最新版本的文件内容
git rm <file> //删除工作区内容
git rm <file> --cached //删除缓存区内容,工作区不受影响(比如.gitignore配置是我们可能会用到这个功能)

e、退回版本

开发中难免会提交错commit、因此git为我们提供了撤销commit的方法。
这里有个重点,没错就是HEAD,在使用git中我们常常会看到HEAD,那么HEAD到底是什么呢?我们知道在git中可能会有很多branch和commit,为了知道我们当前工作区提交到那个branch,所以需要个指针指向当前指向的branch的commit。HEAD可以简单理解成这个指针。(实际,HEAD指向的是当前分支,在每个分支上都有一个指针指向最新的commit,而HEAD始终是指向当前分支的指针,所以可以简单理解HEAD就是指针)


主分支上的指针和HEAD

git reset HEAD read.md //撤销添加到缓存区的内容
git reset HEAD^ //回退一个commit
git reset HEAD~3 //向上回退3个commit
git reset commit_id //回退指定版本
git reset 841125 //回到commit_id=841125的提交

git reset 841125 和 git HEAD~3得到的结果是一样的
第一个方法让git回退到841125的commit 也就是倒数第三个commit;
第二个方法让指针(HEAD)回退3个节点(commit);
需要注意的是reset后面还可以跟 --hard、--mixed、--soft等参数

--mixed 影响仓库和暂存区 (reset HEAD and index)(默认值)
--soft 影响仓库 (reset only HEAD)
--hard 影响仓库、暂存区和工作区 (reset HEAD, index and working tree)
当我们git reset后不跟参数、默认是--mixed,也就是只对暂存区和仓库进行回退。

下面是最近三次的commit

commit 676249486735497db288f6654c7295d13125ec56 (HEAD -> master, origin/master, origin/HEAD)
    最新commit

commit 2d751a62100e2f5af58d35923c84d6f8bc98cd0b
    倒数第二commit

commit 841125dc92f4929fa0fe5622cff1f93af4bebf02
    倒数第三commit

git revert
生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留。

$ git revert <commit ID>

f、撤销工作区中文件

撤销单个文件修改,使用下面命令:

$ git checkout -- 文件名

撤销所以文件修改,使用下面命令:

$ git checkout .

2.4 本地分支

a、 查看分支

略略略...

git branch //查看分支
git remote -vv //查看远程分支
git branch -a //查看本地和远程分支(所有分支)
git branch -vv //查看本地分支关联远程分支,及最近的一次提交

b、 创建、删除、切换

略略略...

git branch <分支name> //创建分支
git branch -d <分支name> //删除分支
git fetch -p //清理已经被删除的远程分支
git checkout <分支name> //切换分支
git checkout -b [分支名] [远程名]/[分支名] //切换并创建

3、 合并

每个需求新建一个分支开发,能很好的解决多个需求在一个分支里造成的混乱。
多人合作开发,创建分支开发真的是用了都说好。所以不可避免的我们需要合并自己的分支和同事的分支。
合并分支如果没有冲突,git里只是把指针指向了最新的commit。我们称之为fast-forward。
如果有冲突,这需要解决冲突,然后提交分支。

git merge <branch> //branch被合并到当前分支
git rebase master <branch> # 将master rebase到branch

merge和rebase都是合并分支,那么有什么区别呢?
主要区别在于,merge会保留分支的真实信息,而rebase会把分支上的commit融合到当前分支上。
直接放链接,解释的很清楚
开发一般都用merge,当然你非要用rebase合并分支也可以。

2.5、 远程分支

终于到最最重要的部分了,没有远程的git是么有灵魂的。

git pull # 抓取远程仓库所有分支更新并合并到本地
git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支

git push # 推送所有分支 (这个后面默认是 当前的分支对应的origin master)
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch> # 创建远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch> # 创建远程分支
git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支

git pull实际上有两个步骤,拉取远程仓库和合并拉取的内容,等同于,git fetch origin(拉取) + git merge brName(合并)

如果远程仓库创建了分支a,但是我们本地还没有分支a,所以我们先本地创建分支a,但是git push时你会发现,我们没有关联到远程分支无法推送,只是我么要用到git branch -u origin a这个方法本地分支a关联到远程分支a,之后我们就可以推送了。关联远程分支前别忘了先git pull,为啥?远程虽然新建了分支a,但是我们本地还不知道,所以需要git pull 获取远程的状态。可能有些乱,下面分解下1.git pull 获取远程信息 2. git checkout -b a 本地创建分支b 3. git branch -u origin a 关联远程分支a 4.git push 推送成功

一般情况下,我们提交到远程仓库,只需要git push即可,但是有时可能出现下面这种情况本地分支a关联的是远程分支b,虽然很很少见。这时如果在使用git push会推送失败,我需要完整的写出git push origin b进行推送。

4、 标签tag

用于对发布版本进行标记,这是最常见的应用场景。

git tag -a v1.0 添加标签
git checkout tagname 切换到 tag code
git log --oneline --decorate --graph 可以查看标签

5、查看文件diff

实际开发中,我基本没有用这个命令,还是在AS对比文件、解决冲突舒服。。。

git diff 比较工作区和暂存区的文件差异
git diff HEAD 比较工作区和仓库的文件差异
git diff --cached 比较仓库和暂存区之间的差异git diff <file> # 比较当前文件和暂存区文件差异

git diff --stat # 仅仅比较统计信息
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff <id1><id2> # 比较两次提交之间的差异

5、保存到隐藏区(常用)

应用场景,假如在develop分支上我们正在开发分支,这是突然有个bug需要我们修复,但是我们又不能在develop分支上直接修改,这时需要我们切换到需要修复bug的那个分支上修复bug,假设这个分支是a。

git stash 保存当前修改到stash中
git stash save “message” 保存带msg的当前修改到stash中
git stash list 查看stash中存储的列表
git stash pop 从stash中提取出最新的保存到当前分支
git stash pop stash@{1} 从stash中提取标记为@{1}的修改到本地
git stash apply 回复工作区不删除stash内容,与pop不同的是不会删除stash区的内容
git stash drop stash@{0} 删除stash内容(通常和apply配合使用)

6、 其他

应用场景:分支b中的一个commit_id=5689k的commit,分支a中没有这个id为5689k的commit,如果分支a需要这个commit的内容,如果一个一个复制也不失是一种办法,但是这样实在是有些低效率,所以git为我们提供了快捷的方法。
git cherry-pick commit_id
在分支a上 git cherry-pick 5689k 即可把5689k的commit内容合并到a分支上路了。

git使用小技巧

$ git checkout - 快速切换到上一个分支
$ git config --global alias.co checkout //设置别名
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

开发中用的命令基本总结完了,可能会有遗漏想起里会补充的,有什么错误欢迎大家指出。(* ̄︶ ̄)

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

推荐阅读更多精彩内容