Git整理

Git

廖雪峰的git教程
git-cheat-sheet

  • 创建仓库
  • git add 暂存区
  • git commit
  • 节点
  • 远程仓库
  • git push
  • merge
  • 回滚
  • rebase

定义

分布式版本控制系统。与集中式分布系统(如svn)相比,git有本地仓库,可以在本地进行操作。而svn这样的集中式分布系统,修改只能直接保存到中央服务器。

创建仓库

创建仓库即在某个目录下,创建一个git仓库。git仓库其实就是在这个目录增加了一个.git目录。
命令:

git init

工作流程

image.png

工作区

就是.git所在目录。

版本库

即.git目录

暂存区

即stage,add的内容会保存在暂存区,等待被commit

image.png

add

将文件添加到暂存区。
命令:

git add

commit

将暂存区修改内容提交到代码仓库。
命令:

git commit -m "xxxx"

diff

查看已经修改,并且没有存入暂存区的文件进行了哪些修改。
命令:

git diff xxxx

rm

删除某一个文件。当在工作区删除掉某个文件后,使用rm命令可以将这个删除提交到暂存区。之后commit,就可以把删除提交到版本库里。
命令:

git rm xxxx

查看日志

log

查看历史commit日志。
命令:

//普通查看
git log
//一行简洁的查看
git log --pretty=oneline

reflog

查看历史提交

git reflog

回滚

reset

重新设置当前的head
命令:

//回到上次commit
git reset --hard HEAD^
//回到上上次commit
git reset --hard HEAD^^
^^的数量表示第上几次提交
//回到某一次提交
git reset --hard 2d2ec8e(替换为具体的版本号,前几位也可以)
//取消某一个add的文件
git reset xxxx
//取消所有add的文件
git reset .

checkout

回撤命令。
如果修改还没有add,则回退到和版本库一样的状态。
如果修改已经add,则回退到上一次add的状态。
总之,就是让文件回到上一次add或者commit的状态。

命令:

git checkout xxxfile

回撤命令

回撤命令,可以回撤已经添加到暂存区的内容。将暂存区内容返回到工作区。
命令:

git reset head readme.txt
//或者
git checkout head readme.txt

恢复文件

恢复删除的文件。本质上,checkout就是用版本库里的版本,替换工作区里的版本。
命令:

git checkout -- test.txt

远程仓库

关联远程仓库

orgin指代了远程仓库,在push时,不需要完整的仓库地址,只需要orgin就可以知道要推送到的远程仓库是哪个。

git remote add origin https://github.com/TokenYc/learngit.git

push

将本地仓库推送到远程仓库
-u的作用是将当前分支与远程分支进行绑定,这样下次在本分支推送的时候,直接git push即可。

git push -u origin master

clone

将远程仓库克隆到本地

git clone git@github.com:TokenYc/gitskills.git

分支

分支指向某一次提交。当HEAD指向某一个分支的时候,就表示当前在这个分支工作。

<meta name="source" content="lake">
image

image.png

分支创建

git branch <name>

切换分支

//新的方式,优先使用这种
git siwtch <branch>
//老的方式,容易混淆
git checkout <branch>

分支创建并切换

//新的方式,优先使用这种
git switch -c <branch>
//比较老的方式,容易混淆
git checkout -b <branch>

查看分支

git branch

合并分支

git merge <name>

删除分支

git branch -d <name>

快速合并

两个分支之间没有冲突,会触发快速合并,原本分支的指针,直接指向合并分支的分支指针。

合并冲突

当两个分支对同一个内容进行了修改,会产生合并冲突。
解决方式:

  • 编辑出现冲突的文件。
  • add
  • commit

查看分支合并情况

//原始方法
git log
//用图的形式展示
git log --graph
//用图的形式更简洁的展示
git log --graph --pretty=oneline --abbrev-commit

禁用快速合并

使用快速合并,如果开发分支删除了,就看不出来之前的合并了。
可以通过合并时添加参数,使用普通方式代替快速合并。在合并时,会产生一个新的节点。

git merge --no-ff -m "merge with no-ff" dev

stash

存储工作现场。方便去其他分支修改东西。

git stash
//查看stash
git stash list
//还原最新的现场,不删除stash
git stash apply
//删除最新的stash
git stash drop
//还原最新的现场并且删除stash
git stash pop
//还原某一次现场,编号可以通过list查看
git stash pop xxxxx

cherry-pick

将某一次提交复制到当前分支,生成一个新的提交。

git cherry-pick [提交id]

强制删除分支

未合并的分支无法用-d删除,需要使用-D大写来删除

git branch -D xxx

查看远程分支

//查看远程分支
git remote
//查看远程分支详细信息,如果没有推送权限就看不到推送地址
git remote -v 

推送到远程仓库

//指定本地分支
git push origin [分支名称]

拉取分支

从远程拉取分支到本地

git checkout -b dev origin/dev
//或者
git switch -c dev origin/dev

指定本地分支与远程分支链接

如果没有设置,git pull会失败

git branch --set-upstream-to=origin/dev dev

Rebase

A分支合并到B分支,B分支的修改,都挪到A分支的头部,这样提交的节点就在一条线了。
合并远程分支或者其他分支,如果有冲突,会产生一个分支合并的节点,产生分叉。使用rebase某个分支,可以消除分叉, 使分支更新的内容基于远程分支的最新更新。

git rebase <branch>

如果产生冲突,先修改产生冲突的问题。然后add,再执行

git rebase --continue

可能出现多次rebase,需要多次进行上面的操作。

Tag

打tag

打tag就是指定一个指针指向某一次提交,用于记录版本。

git tag v1.0

查看所有标签

git tag

对某一次提交打tag

git tag v1.1 f52c633
//附带说明
git tag -a v1.1 -m "1.1版本"

展示某个tag指向的提交

git show v1.0

将tag推送到远程分支

//推送单个
git push v1.0
//推送所有tag
git push --tags

删除标签

git tag -d v1.1

删除远程标签

//1.先删除本地分支
git tag -d v1.1
//2.推送删除远程分支
 git push origin :refs/tags/v1.1

Github如何pr

1、从主项目中fork一份到自己的仓库。
2、提交代码到fork的仓库。
3、在fork的仓库里申请pr

配置

忽略文件

添加一个.gitignore文件,在里面添加需要忽略的文件并提交,就可以实现文件忽略了。
如果需要强行add某个文件

git add -f xxxx

找到哪个配置忽略了文件

git check-ignore -v App.class

设置例外规则

.*
!.gitignore

配置别名

git config --global alias.st status

设置一个漂亮的log

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

删除配置的别名:
如果是针对仓库的,在.git/config中删除。
如果是针对全局的,在user/.gitconfig中删除

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

推荐阅读更多精彩内容

  • 1. 版本控制 CVS及SVN都是集中式的版本控制系统而Git是分布式版本控制系统。 集中式版本控制系统,版本库是...
    Curry_J_X阅读 336评论 0 0
  • 一 Git. 的安装 安装了 XCode 集成了 git, 所以直接在终端使用 安装完成之后需要在终端中配置一下 ...
    lxb0706阅读 477评论 0 0
  • 一.新建仓库 2.下载安装git软件 3.将远程代码拉取到本地(官方文档:https://gitee.com/he...
    Grit_1024阅读 510评论 0 6
  • git 学习廖雪峰的Git教程 git中文手册、比较适合新手视频教程:Git零基础实战视频教程(共49课时)git...
    孙小二wuk阅读 156评论 0 0
  • Git 本笔记是在学习狂神说java的B站视频记录的。 什么是版本控制 版本迭代,新老的版本,版本管理系统 多人开...
    Zeoytin阅读 226评论 0 0