git命令的学习

第一部分是文档,为了日后查看方便放到了前边[可能敲错了,详见阮一峰老师的文章]
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
第二部分是demo,一些基本的操作,懒得截图,可以按提示敲 为
详情请见知乎专栏
https://zhuanlan.zhihu.com/p/30044692?utm_source=wechat_session&utm_medium=social

一、配置项

1、新建代码库

当前目录新建git库
git init
新建一个仓库,将其初始化为git代码库
git init [project-name]
下载一个项目和的他整个代码的历史
git clone [url]

2、配置

显示当前的git配置值
git config -list
编辑配置文件
git config -e [-global]
设置提交代码的用户信息
git config[-global] user.name "[name]"
git config[-global] user.email "[email address]"

3、添加/删除文件

添加文件到暂存区
git add [file1][file1]...
添加指定目录到暂存区,包括子目录
git add [dir]
添加当前目录所有的文件到暂存区
git add .
添加每个变化前,都会要求确认,对于同一个文件的多处变化,可以实现分次提交
git add -p
删除工作区文件,并将这次删除放入暂存区
git rm [file1] [file2]
停止追踪制定文件,但是该文件会保留在工作区
git rm --cached [file1]
改名且放到暂存区
git mv [file-original][file-rname]

4、代码提交

提交暂存区到仓库区
git commoit -m [message]
提交暂存区到指定仓库区
git commit [file] [file2] -m [message]
提交工作区自上次commit之后的变化,直接到仓库区
git commit -a
提交时显示所有的diff信息
git commit -v
使用一次新的commit替代上次提交如果代码没有任何变化,用来改写上一次commit的提交信息
git commit --amend -m [message]
重做上次commit并包括指定文件的新变化
git commit --amend [file1][file2]

5、 分支

列出所有的本地分支
git branch
列出所有的远程分支
git branch -r
列出所有的本地分支和远程分支
git branch -a
新建一个分支,但依然停留在当前分支
git branch [branch-name]
新建一个分支,并切换到该分支
git checkout -b [branch-name]
新建一个分支,指向指定commit
git branch [branch][commit]
新建一个分支,指定的远程分支建立追踪关系
git branch --track [branch][remote-branch]
切换到指定分支,并更新工作区
git checkout [branch-name]
切换到上一个分支
git checkout
建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream[branch][remote-branch]
合并指定分支到当前分支
git merge[branch]
选择一个commit 合并进的当前分支
git cherry-pick[commit]
删除分支
git branch -d [branch-name]
删除远程分支
git push-orinin --delete [branch-name]
git branch -dr[remote/branch]

6、标签

列出所有的tag
git tag
新建一个tag在当前的commit
git tag [tag]
新建一个tag在指定的commit
git tag [tag] [commit]
删除本地的tag
git tag -d [tag]
查看tag信息
git show [tag]
提交指定的tag
git push [remote][tag]
提交所有的tag
git push [remote] --tages

新建一个分支,指向某个tag
git checkout -b[branch][tag]

7、查看信息

显示有变更的文件
git status
显示当前的分支的版本历史
git log
显示commit历史以及每次commit发生变更的文件
git log --stat
搜索提交历史 根据关键词
git log -S[keyword]
显示某个commit之后所有的变动,每个commit占据一行
git log [tag] HEAD --pretty=format:%s
显示某个commit之后所有变动,其提交说明必须符合搜索条件
git log[tag] HEAD --grep feature
显示某个文件的版本历史包括文件改名
git log --fllow [file]
显示指定文件相关的每一次diff
git whatchange[file]
显示过去5次提交
git log -5 --pretty --oneline
显示所有的提交过的用户,按提交次数排序
git shortlog -sn
显示指定文件,是什么人在什么时间改过
git blame [file]
显示暂存区和工作区的差异
git diff
显示暂存区和上一个commit的差异
git diff --cached[file]
显示工作区和当前分支最新commit之间的差异
git diff HEAD
显两次提交的差异
git diff [first-branch]...[second-branch]
显示今天你写了多少行代码
git diff --shortstat "@{ 0 day ago}"
显示某次提交的元数据和内容变化
git show [commit]
显示某次提交发生变化的文件
git show --name-only[commit]
显示某次提交时候,某个文件的内容
git show [commit][filename]
显示当前分支的最近几次提交
git reflog

8、远程同步

下载远程仓库所有的变动
git fetch [remote]

显示所有的远程仓库
git remote -v
显示某个远程仓库的信息
git remote show [remote]
增加一个新的远程仓库,并命名
git remote add [shortname][url]
取回远程长裤的变化,并与本地分支合并
git pull [remote] [branch]
上传本地指定分支到远程仓库
git push [remte][branch]

强行推送当前分支到远程仓库 即使有冲突
git push [remote] --force
推送所有的分支到远程仓库
git push [remote] -all

9、撤销

恢复暂存区的指定文件到工作区
git checkout[file]
恢复某个commit的指定文件到暂存区和工作区
git checkout [commit] [file]
恢复暂存区的所有的文件到工作区
git checkout
重置暂存区与工作区 与上次commit保持一致,工作区不变

git reset [file]
重置暂存区与工作区 与上次commit保持一致
git reset --hard
重置当前分支的指针为指定的commit同时重置暂存区,但是工作区不变
git reset [commit]
重置当前分支的HEAD为指定的commit同时重置暂存区和工作区,与指定commit一致
git reset --hard[commit]
重置当前HEAD为指定commit但是保持暂存区和工作区不变
git reset --keep[commit]
新建一个commit用来撤销指定commit 后者的所有变化都将被前者抵消,且应用到当前分支
git revert[commit]
暂时将未提交的变化移除,稍后再移入
git stash
git stash pop

二、demo

0、准备工作

1.下载git程序 ,按步完成安装,右键git bash进入
2.测试git

  1. git help git//检车git的安装情况
  2. git config --global(可选) user.name "baipu"
  3. git config --global(可选) user.email "baipubelive@126.com"

1、创建版本库

  1. cd 进入相关的目录下/在相关的目录下打开git bash

  2. pwd 查看当前目录的状态

  3. git init 将当前目录变成git可以管理的仓库(会多一个。git的问题件)

  4. 目录下新建一个文件,内容111 名字readme.txt(用于将来的添加文件)

  5. git add readme.txt (添加到暂存区)

  6. git commit -m "radme.txt提交"(引号部分是用来提交注释的,执行完这句话,理论上就提交成功了)

  7. git status 查看当前是否还有文件没有提交

  8. 将文件内容添加2222222、333333 对文件进行修改,然后差异提交

  9. git status 查看有哪些文件发生了修改

  10. git diff readme.txt 查看这个文件具体有哪些字段进行了修改

  11. git add readme.txt ;git commit -m "修改了一些字段"(重复上边提交的过程 )

2、版本回退:

  1. 先对read文件进行修改,然后提交(下面就是回退这一步)

  2. git log 进行查看自己提交的日志
  3. git log --pretty=oneline 上边的方法打印出来的内容可能比较多,这种让所有的信息展示在一行上
  4. git reset --hard HEAD^ 这个就是回退到上一个版本(git reset --hard HEAD^100这个是往前回退到前100个版本中)
  5. git reflog 查看自己前几部的提交,包括撤销,这时候就能看到每一步的版本号下一步恢复那个版本的时候用
  6. git reset --hard --5ec3e3c 回退到版本号为5ec3e3c的
  7. cat readme.txt 查看文件的内容,发现这个已经是第1步的时候自己修改后的文件了

3、工作区和暂存区

工作区:电脑上看到的目录,git目录下的文件,或者以后需要新建的目录文件都属于工作区的范畴
版本库:.git这个文件不属于工作区,是版本库,其中的版本库存放了很多的东西,最重要的就是stage暂存区,git为我们自动创建了第一个分支,master以及指向第一个分支的指正Head.

git add就是把文件添加到暂存区,

git commit 就是把暂存区的所有的内容提交到当前分支上

测试:

  1. 修改readme.txt然后添加新的文件,test.txt

  1. git status 可以看到,两个文件你的修改都有提示 而且是红色的
  2. git add git status 添加到暂存区,然后查看状态 发现两个修改的文件提示为绿色的
  3. git commit -m "修改信息"
  4. git status 没有那两个文件了

4、撤销文件修改和删除文件的操作

1、撤销修改

几种方法:

  1. 手动修改,然后add commit

  2. 按照以前的方法 git reset --hard HEAD^

  3. 新的方法
    1.git status 查看状态(上边有提示,git checkout --file可以丢掉工作区的修改)
    2.git checkout --readme.txt 把readme。txt的文件在工作区做的修改全部撤销,这里又有两种情况:

    1. readme.txt自动修改后,还没有放到暂存区,使用撤销修改就回到了和版本库一模一样的状态
    2. 已经放到暂存区了,接着又做了修改,撤销修改就回到了暂存区后的状态

    4.cat readme.txt
    5.git add readme.txt //放到暂存区

    1. 修改它

    7.cat readme.txt//发现已经改变了
    8.git checkout --readme.txt(这里的--十分关键,否则就没有效果了)

2、删除文件

  1. git add b.txt
  2. git commit -m "添加了b文件"
  3. rm b.txt
  4. git status//这时候查看已经被删掉,有两个操作1、commit掉,2、checkout恢复了
  5. 没有commit之前的恢复操作 : git checkout --b.txt

5、远程仓库

需要有github的账号 git和github之间的传输是通过ssh加密的,需要设置

  1. 创建ssh key 看看目录下有没有.ssh的目录 .ssh目录下有没有id_rsa id_rsa_pub的文件如果有的话,直接跳过如下的命令
  2. ssh-keygen -t rea -C "baipubelive@126.com"
  3. id_rsa 是私钥,id_rsa.pub是公钥,可以放心的告诉任何人
  4. github的 settings ssh key界面上对应的addssh key填入任意的title 然后key文本中粘贴id_rsa.pub文件的内容

添加远程库
本地的项目和github的连接

  1. 在github上创建一个仓库 create a new repo 仓库名 创建

  2. git remote add origin https://github.com/github的名字/仓库名.git

  3. git push -u orinin master 把本地仓库的分支master内容推送到元仓库中区 参数上-u的存在意义不但会把本地推送,还要把本地和远程关联起来,以后就方便多了

  4. 然后本地提交 git push origin master

远程克隆文件
git cline https://github.com/github名字/仓库名

6、创建和合并分支

1、创建分支

1.git checkout -b dev 创建并切换分支,相当于以下的两部

  1. git branch dev
  2. git checkout dev

2.git branch 查看当前的分支,这时候会列出所有的分支,然后当前分支前会添加一个*,然后我们的
3.git checkout dev 切换到目标分支上,比如我们要切换到dev的分支上
4.这时候对readme.txt文件进行修改,然后添加 提交 git add . ;git commit -m "我又提交东西了"
5.cat readme.txt 发现文件改变了
6.git checkout master 切换到主分支
7.cat readme.txt 发现文件又没有改变
8.git merge dev 将dev分支上的信息整合到主分支上
9.cat readme.txt 发现文件变成了改变后的状态
10.git branch -d dev 删除了分支
11.git branch 这时候查看分支,已经没有dev这个分支了

总结创建分支的命令如下:

  • git branch 查看分支
  • git branch name 创建分支
  • git checkout name 切换分支
  • git checkout -b name创建+切换分支
  • git merge name 合并某个分支到当前分支
  • git branch -d name 删除分支

2、如何解决冲突?

如下demo:

  1. git checkout -b fenzhi 创建并转到分支上

  2. 修改文件readme.txt git add readme.txt git commit -m "this is wenjian"

  3. git checkout master切换回去

  4. 修改文件readme.txt git add readme.txt git commit -m "this is wenjian"

  5. git merge fenzhi 将两个分支合并

  6. git status 出现了conflict (content) :merge conflict in readme.txt这种提示,表示有分支冲突

  7. git status也可以看到提示冲突
    1.<<<<<<<<<<<<< HEAD //表示主分支的内容
    2.66666666666 //主分支提交的内容
    3.----------- //分隔符
    4.5555555555 //分支上提交的内容
    5.>>>>>>>>>>>>>fenzhi //分支的名字

  8. 你可以在文件里进行修改了,合并还是咋地,爱咋咋地

  9. git commit -m "合并完之后再次提交"

  10. git log这样你就看到了提交的各种历史记录

3、分支管理策略

合并分支 git一般来说是“fast forward”模式,这种模式删除分支,丢掉分支信息,我们用--no-ff这个来处理

  1. git checkout -b dev创建一个分支
  2. 修改文件,
  3. git add readme.txt (此时没有commit)
  4. git checkout master 这里切换到主分支上
  5. git merge --no-ff -m "merge with no-ff" dev 合并两个分支,注意这里用到了 --no-ff 参数,表示禁用fast forward模式
  6. git branch -d dev 删除分支 执行结果会返回delete branch dev (was edee06c)edee06c的意思就是版本号
  7. git branch //检查是否删除成功
  8. git log --graph --pretty=oneline --abbrev-commit这句话我还没有分清各个的意思
  9. 但是8点执行下的,还能看到edee06c这个版本号,被删分支的版本号还在
    分支策略:
    一般来说,master都是比较稳定的一个版本,需要发布的版本,一般情况下不允许在上边干活,在新建的分支上干活,然后分支代码稳定后就可以合并到master上来

7、bug分支

每个bug都可通过一个分支来修复,修复完成够,合并各个分支,然后将临时分支删除了
业务场景如下:

  1. master是要发版的代码,然后dev是正在开发的代码(手动在dev的readme.txt中添加一行数据) 现在发现master上有个bug第一行需要添加一段代码,但是这个时候dev的代码还不能提交肿么办?
  2. 在dev的分支上 git stash 将目前的分支藏起来,这个时候git status就没有任何变化了,
  3. 然后新建一个分支 error 在error完成修改提交
  4. 回到主分支master上,进行合并,修复生产bug 删除error分支
  5. 回到dev的分支上,代码还是藏了开发代码后修复bug之前的代码
  6. git stash list 查看所有隐藏的代码
  7. 要恢复代码有两种方式 git stash apply /git stash pop
  8. 取出来后需要删除stash储存的东西 git stash drop

8、多人协作:

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,642评论 4 54
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,617评论 9 163
  • 是夜,书生在城外喝醉了酒,一摇三晃往家走。不知是酒太烈还是月色太足,书生只觉眼晕脑沉,便钻进路旁一座破庙歇脚。 这...
    暮凝阅读 1,253评论 1 6
  • 紧锣密鼓的育婴师培训到今天下午为止,正式画上圆满的句号,非常感谢苏曼老师,刘芳老师,朱朱老师的辛苦付出,为我...
    亲爱的小鱼老师阅读 4,803评论 1 9
  • 今天又给妮子打了一通电话,絮絮叨叨四十多分钟,没什么要紧事,就是聊一些生活中让人想不通却又不得不面对的事情。隔着数...
    闲茶淡花阅读 375评论 0 2