git常规操作【初始化/提交代码/撤销/删除/合并分支/储存变更】

由于公司一直用的SVN对项目进行版本管理,所以一直也没怎么接触过git。虽然我之前有使用码云私有仓库管理代码,但是我对git的操作还停留在git add . git commit -m上。直到最近听说github的私有仓库免费了,所以我又抽时间看了下git的基本操作(免费使我进步,哈哈哈~~),下面是我整理的笔记,希望对你有帮助。

基础部分

初始化git

git init 初始化

检查状态

git status 检测文件状态(有没有被追踪Untracked)
提交到版本库的文件不会显示在git status里

GIT四种状态

untracked 未被追踪
modified 表示工作区修改了某个文件但是没有添加到暂存区
staged 表示把工作区修改的文件添加到了暂存区但是没有比较到版本库
Commited 表示数据被安全的存储在本地库中

GIT三层结构

working directory 工作区
staging index 暂存区
git directory(Repository) 版本库

提交代码

git add fileName 追踪 (从工作区添加到暂存区)
git add . 追踪全部本地文件到暂存区
git commit -m '描述' 提交到版本库

告诉git使用者的身份

git config --global user.name yourName
git config --global user.email yourEmail

其他

git config --list 查看git配置情况
git log 查看提交信息(提交人/邮箱)
git help 命令名 (例git help add):将弹出想要查找的命令的文档

撤销部分

git add . + git commit -m 'msg == git commit -am 'msg'

例如: git commit -m 'versions 1.0' 提交到版本库
这时候不能使用 'versions 1.0' 再次提交了 如果还想用这个名字的话 使用↓↓
git commit--amend 撤销上一次的提交,并将暂存区的文件重新提交 也可以通过这个命令改变版本描述(不改变暂存区内容的情况下)

git checkout -- fileName 编辑器的文件恢复成了修改前的样子(最后一次提交)
git checkout -- . 撤销恢复全部文件

git reset HEAD fileName 撤销提交到暂存区 (这的HEAD为头指针)
此处HEAD也可以换为版本号(将相应版本里的文件拉回到暂存区)
这一步不会影响工作区↑↑,想工作区恢复 需要使用git checkout -- fileName
Unstaged changes after reset(将改变撤销暂存);

可以通过git log 查看各种版本的版本号 然后通过版本号恢复到某个版本(这也会改变HEAD的指向)
git reset 版本号(commit后面的) 文件名;
再用git checkout -- fileName 拉回来

删除部分

git rm fileName:此步操作会把工作区的文件连同暂存区的文件一起被删除

当工作区的文件或者暂存区的文件被修改后,想进行git rm 操作,git会禁止我们删除,起到了一个防止误删除的作用。
如果想要保留工作区的文件 那么就要用git rm --cached 文件名 来仅仅删除暂存区的文件
git rm -- cached fileName 在不小心将不需要追踪的文件添加到暂存区后,想删除暂存区的文件但是不想删除工作区的文件很有用
git rm -f fileName 同时删除工作区和暂存区的文件
mv fileName newFileName 本地(工作区)重命名
mv fileName newFileName 工作区和暂存区都重命名

git指针概念

Git指针
当提交一个版本的时候,就会有一个版本号(V1),这时候有两个指针指向这个版本,一个是master(当前分支指针),一个是HEAD(指向当前分支的最后一个版本)
当提交了一个新的版本(V2),master指针和HEAD指针都指向了最新一次的提交(V2),V2有一个指针指向V1。这的指针是指(文件中有一块地方保存着其他文件的地址),调用V2的时候可以直接通过V2找到V1的地址,从而调用V1,以达到方便的访问V1的目的,以此类推。
如果在V2版本上创建了一个分支(D1)的时候,master分支指针依旧会指向V2,新的D1分支指针会指向新的D1分支,当切换到D1分支的时候,head指针会切换到D1上,此时的D1还有一个指针指向V2。
修改D1分支的时候,D1和head指针也会以此类推到D2。当从D2合并分支到V2的时候,会形成V3分支,V3分支既指向V2分支,又指向D2分支。此时HEAD和master指针指向V3分支。

分支部分

git branch 查看本地分支
git branch -a 查看远程分支
git branch branchName 创建新分支
git checkout branchName 切换分支
git branch -d branchName 删除分支 (此操作必须保证当前的分支非想要删除的那个分支)
git branch -m branchName newBranchName 修改分支名
git checkout -b branchName 创建分支并切换分支

合并分支

首先切换到主分支(master)
git merge branchName 合并分支
这时候如果branch和master在相同位置有不同的修改,也就是发现了冲突的时候,git会抛出一个让我们来手动解决冲突的错误↓↓。
automatic merge failed:fix conflicts and then commit result.(自动合并失败:修复冲突,然后提交结果。)
<<<HEAD到===之间是master分支的内容
===到>>>branchName 是branchName分支的内容
然后重新git commit -am 'msg' 提交到暂存区及版本库;

git diff 比较差异(默认比较工作区和暂存区文件的差异) 如果没有差异是不会有任何展示的
git diff --staged 比较暂存区与版本库之间的差异
git diff 还可以比较同一个分支中两个不同的版本之间的差异(在版本回退时非常有用)
版本hash值 最少选择4个 git默认选择7个 建议尽量选择8-10个 这样才能保证唯一性
git diff branchName 还可以比较两个分支之间的差异

储存变更部分

比如在branch分支上进行修改后,切换到master分支,会报一个
please commit your changes or stash them before you switch branches;(请在切换分支之前提交更改或将其隐藏)的错误,我们使用
git stash 暂存工作区的修改,然后git会帮我们自动切换到修改前的状态
这时切换分支就不会报错了,因为git在进行分支切换的时候,主要改变的是版本库,当工作区有改变的时候,会直接将工作区的改变覆盖到另外一个分支上,从而影响另外一个分支。如果我们使用git stash进行封存,git就会自动将工作区的改变撤销掉,回到修改前的状态(上一次提交后的状态)。
git stash list 查看当前保存了哪些本地文件
git stash apply stash@{0} 返回之前用git stash封存的改变
stash@{0} 里面的0根据提交git stash的次数以此类推
git stash pop stash@{0} 拉回到暂存区和本地
此时再执行 git stash list 查看封存的文件时 stash@{0}不见了
也就是说 git stash pop stash@{0} 是在git stash apply stash@{0}的基础上,增加了一个删除命令。
也就是说,返回的同时,删除git stash中的这个文件的命令。
git stash drop stash@{0} 删除封存的修改。
综上 git stash pop stash@{0} = git stash apply stash@{0} + git stash drop stash@{0}

使用远程仓库管理代码(github/码云)

git push 远程仓库地址 (分支:可不填) :推送到远程仓库
git pull
如果使用ssh地址
在管理员账户使用 ssh-keygen 生成密钥 文档后缀为File的为私钥 后缀为PUB(public的缩写) File为公钥
然后点击github→setting→SSH→New SSH key→输入标题/添加公钥;
此时就可以用SSH地址拉取了

推代码到远程仓库:

// 方法1: 
git push git@github.com:仓库名称(name/xxx.com.git)
// 方法2: 
git push 仓库地址(https://github.com/name/xxx.com.git)
// 方法3: 
git remote add origin(仓库名 通常使用origin) git@github.com:仓库名称(name/xxx.com.git);

git remote -v 查看添加的远程仓库
然后使用 git push origin master 推送到远程仓库

git pull 仓库名 分支名(master) 拉取到本地

让git不追踪指定文件

如果有一些文件不想让git对它追踪
touch .gitignore : 在项目目录下建立一个 .gitignore文件
vim .gitignore 编辑这个文件
然后把想忽略的文件添加到cmd命令行
或者可以 index.* :忽略所有以index.为开头的文件(支持glob规则)
也可以在里面加上.gitignore 让他忽略.gitignore文件
glob规则:
(*号)匹配零或多个任意字符
[abc]匹配任何一个列在方括号中的字符
(?号)只匹配一个任意字符
[0-9]/[a-z]匹配范围

已经长传到暂存区/版本库的想忽略的文件,可以:
git rm index.html --cached 删除暂存区的文件
任何再提交 git commit -m 'msg 提交↑的操作:这时,提交的还是暂存区的文件,本地仍然是改变这个index.html,这个改变并没有提交到暂存区,更没有到版本库
只有将暂存区里相应文件删除后,忽略才生效 ~

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

推荐阅读更多精彩内容

  • 简介 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 与常用的版本控制工具 ...
    闽越布衣阅读 2,720评论 0 18
  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,753评论 0 10
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,615评论 9 163
  • Git简明教程 1. git四大域 git四大域:工作目录,暂存区,仓库,远程仓库。git对文件的操作都是在四大域...
    lavor阅读 11,046评论 27 435
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,036评论 4 18