git笔记3-Git

git命令

  • git init 初始化仓库
  • git status 查看当前状态
  • git add -A (提交所有的) 提交本地文件到缓存区
  • git commit -m "提交信息" 将缓存区的东西提交到本地仓库
  • git push 将本地仓库的内容提交到远程服务器
  • git pull 从远程服务器更新
  • git log 查看所有的提交日志 ,命令显示从最近到最远的提交日志
    git log --pretty=oneline 只输出 commit id 和commit信息
  • git reflog 查看所有的SHA值

  • git reset --hard <sha值> 回退到某一个版本
    git reset --hard HEAD^ 回退到上个版本。在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写成HEAD~100
    git reset --mixed(默认可以不写) <sha> 回退到修改状态
    git reset --soft <sha> 回退到暂存区状态

git分支

  • git branch <branchname> (branchname分支名称) 创建分支
  • git checkout <branchname> 切换到<branchname>的分支上
    上面两个命令可以合成一个命令
    git checkout -b <branchname>* 创建新分支branchname, 并切换到新分支
  • git branch 查看当前分支, 有*的代表当前正在工作的分支
  • git merge <branchname> 分支合并 ,将 <branchname>上的内容合并到master上
  • git branch -d <branchname> 删除<branchname>分支
  • git branch -r -d origin/<branchname> 删除远程分支
  • git branch <branch> <start point> 基于当前分支的某一次commit来创建分支. 比如: git branch newbranch 9e828b1 在当前分支commit 为 9e828b1 点上创建分支 newbranch

git共享仓库

  • git clone 仓库地址
git clone --bare** 项目地址 仓库名称(可选)
  • 共享仓库看不到工作区,但是里面有内容 他是共享的,别人只能往里面放代码,但是不让修改, 如果想获取就直接克隆。

文件冲突: 多个人同时改了同一个文件的同一行就会引起冲突。

  • ssh-keygen -t rsa 生成 公钥/私钥
  • git remote -v 查看远程仓库地址 默认 origin
  • git remote add 仓库名称 仓库地址

修改远程仓库地址

  • 1.直接修改
git remote origin set-url [url]
  • 2.先删除后增加
git remote rm origin
git remote add origin [url]
  • 3.直接修改config文件

git tag 标签

标签可以针对某一时间点的版本做标记,常用于版本发布
1.标签创建和查看

  • git tag 查看所有标签。注意,标签不是按时间顺序列出,而是按字母排序的。
$ git tag
v1.0
  • git tag <name> 给当前分支打标签,
    如: git tag v0.1.2
  • git tag -a <tagname> -m "文字信息" 创建带有说明的标签,用-a指定标签名,-m指定说明文字。
    如:git tag -a v0.1.2 -m “0.1.2版本”。
  • git tag -a <tagname> <commit id> 给指定的commit打标签。
    注意要先获取打标签分支的commit id。如:git tag -a v0.1.1 9fbc3d0 , 给指定的commit打标签
  • git show <tagname> 可以查看标签的版本信息,如:git show v0.9
$ git show v0.9
commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:56:54 2018 +0800

    add merge

diff --git a/readme.txt b/readme.txt
...

  • git checkout [tagname] 切换标签与切换分支命令相同

2.标签发布
通常的git push 不会将标签对象提交到git服务器,我们需要进行显式的操作:

  • git push origin <tagname> 推送某个标签到远程。
    如: git push origin v0.1.2 , 将v0.1.2标签提交到git服务器
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
 * [new tag]         v1.0 -> v1.0
  • git push origin –-tags 将本地所有标签一次性提交到git服务器

3.删除标签

  • 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
  • git tag -d v0.1.2 删除本地标签
$ git tag -d v0.1
Deleted tag 'v0.1' (was f15b0dd)
  • 然后,从远程删除。删除命令也是push
  • git push :refs/tags/v0.1.2 删除远程tag
$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
 - [deleted]         v0.9

git diff 差异化

比较暂存区和当前的版本的差异,此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
也就是修改之后还没有暂存起来的变化内容。

  • git diff 查看修改内容
  • git difftool 分屏比较
  • git diff sha1 sha2 比对2个不同的版本
  • git difftool sha1 sha2 分屏对比

git check 补充

  • git checkout --datch <branch> 切换到某一个分支的最后一次commit值状态

  • git checkout -B <branch> 强制创建新的分支, 并覆盖掉原来同名的分支

  • git checkout --orphan <branch> 根据当前分支,创建并切换到一个无历史的新分支.注意:该新分支需要commit 一次以后才会存在.

  • git checkout -p <branch> 这个命令主要用来比较两个分支间的差异内容,并提供交互式的界面来选择进一步的操作。这个命令不仅可以比较两个分支间的差异,还可以比较单个文件的差异!

  • **git checkout --merge ** 切换分支的时候,将当前分支修改的内容一起打包带走,同步到切换的分支下.
    有两个需要注意的问题:
    第一,如果当前分支和切换分支间的内容不同的话,容易造成冲突。
    第二,切换到新分支后,当前分支修改过的内容就丢失了。
    所以这个命令,慎用!

  • git checkout -- file 可以丢弃工作区的修改

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
  一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

git简写

git st # git status
git ci  # git commit
git br # git branch
git co # git checkout
git mg # git merge
git line # git log --oneline

git md = commit --amend
git dt = difftool
git mt = mergetool
git last = log -1 HEAD
git cf = config


git stash 保存工作区

  • git stash 保存内容(入栈) 切换分支的时候不会让另一个分支看到
  • git stash pop 回到最初保存的内容

md5加密 不可逆

  • echo -n 123456 | openssl md5
  • -n就表示不输入回车符
  • 结果 e10adc3949ba59abbe56e057f20f883e

base64加密/解密

  • 加密

    • echo abc | openssl base64
    • YWJjCg== (编码结果)
  • 解密

    • echo YWJjCg== | openssl base64 -d
    • abc (解码结果)
  • wc 统计字节数

    • wc -l filename 报告行数
    • wc -c filename 报告字节数
    • wc -m filename 报告字符数
    • wc -w filename 报告单词数

gitignore 忽略文件

创建 .gitignore文件, 图形化界面不能创建

  • node_modules/ node_modules下的所有文件都不提交

  • node_modules/.jpg* node_modules/123.jpg图片不提交但是node_modules/sunke/456.jpg可以提交

  • .idea/* .idea 下的所有文件都不提交

  • *.png 忽略所有的 .png 结尾的文件

  • !xxoo.png 但排除 xxoo.png

想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交

  • 注意不要漏了最后面点号
  • git rm -r --cached .
  • git add .
  • git commit -m 'update .gitignore'

git 三种状态

  • 对于任何一个文件,在 Git 内都只有三种状态:

    • 1.已提交(committed)
    • 2.已修改(modified)红色状态
    • 3.已暂存(staged) 绿色状态
  • 已提交表示该文件已经被安全地保存在本地数据库中了;

  • 已修改表示修改了某个文件,但还没有提交保存;

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

  • 所以Git 管理项目时,文件流转分为三个工作区域:

    • 1.工作目录
    • 2.暂存区域
    • 3.Git仓库
  • 工作目录:对项目某个版本独立提取出来的内容。从Git仓库的压缩数据库中提取出来的内容。

  • 暂存区域:本质是一个文件,保存下次将提交的文件列表信息,一般在Git仓库目录中。有时候也称作“索引(Index)”。

  • Git仓库:Git用来保存项目源数据和数据库的地方。这是Git种最重要的部分,其他计算机克隆仓库时,拷贝的就是这里的数据。

git原理.png

git创建仓库步骤

  • 1.git init 初始化一个空的git仓库
  • 2.如果没有配置用户,需要配置用户名,邮箱,来区别用户
  • 3.git status 查看当前文件状态
    • 文件状态三种:
    • 红色: 修改状态/未纳入版本控制
    • 绿色: 暂存状态
    • 什么都没有 已提交
  • 4.git add 文件名称 把文件添加到暂存区域
    • git add . 代表当前文件夹在开发中经常用
    • git add * 所有文件
    • git add -A 所有文件

暂存区域其实是一个文件,索引文件 index
在此文件中记录了那些文件要被提交到仓库中

  • 5.git commit -m"提交的描述信息"

    • 把暂存区域的内容提交到 .git 仓库中,并生成一个版本记录
  • 6.git log 查看所有的版本记录.

  • 7.git push


git命令的bug

错误1:

$ git push ../../share/MJD.git/
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream ../../share/MJD.git/ master

  • 原因:如果当前push的本地仓库是共享仓库clone的仓库, 需要指定当前工作目录工作分支,和远程仓库分支之间链接关系,开始只需要指定一次
  • 解决:
git push --set-upstream ../../share/MJD.git/ master
gitb11.png

错误2:

warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'.

事实上这并不会影响你push的结果,最终push还会成功,因为这只是一个”warning“。

解决:执行git config --global push.default matching或者git config --global push.default simple命令,以后再push就不会有警告了。

补充:push.default matching 和 push.default simple的区别:

  • push.default 设置maching的意思是:git push 会把你本地所有分支push到名称相对应的远程主机上。这意味着可能你会在不经意间push一些你原本没打算push的分支。

  • push.default 设置成simple的意思是:git push仅仅把当前所在分支push到从当初git pull pull下来的那个对应分支上,另外,这个过程也会同时检查各个分支的名称是否相对应。

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

推荐阅读更多精彩内容