Git没有那么难

Git 使用笔记

概念理解

  • 未索引文件 / Untracked Files
    未索引文件,指一个文件从未接受过任何git操作
    [VS Code]这类文件在VS Code的git面板里,其前会有一个U字母图标

  • 工作区 / Working Directory
    添加文件、修改文件、删除文件等等操作,都发生在工作区里
    [VS Code]当你修改了任何文件,这些文件就会出现在VS Code中的git面板里的更改区域下,这个更改区域就是工作区

  • 暂存区 / Staged Changes
    工作区里的文件,可以通过git add命令来添加到暂存区里,以便进行下一步的git commit操作
    [VS Code]对更改区域的文件点击加号,这个文件就会被移动到暂存的更改区域下,这个区域就是暂存区

  • 区别工作区和暂存区
    一个文件可以在git add操作后,又再次进行修改,这时候它会同时出现在工作区和暂存区里,工作区里保存的是git add以后所进行的那些修改
    当你对这个文件进行git commit的操作时,工作区里的修改不会被提交,只有暂存区里的所保存的那些修改内容才会被提交

  • 版本库
    一个文件的修改一旦提交后,就会从暂存区里消失,转而保存在git的版本库里。可以通过git log命令来查看版本库(每一次的提交历史)
    可以通过各类操作,把一个文件恢复到版本库里记录的某个状态(即恢复到某一次提交时那个文件当时所保存的内容)
    而工作区和暂存区的内容,一旦没有最终提交,而是被撤销了,是找不回来的

  • 远端 / Remote
    前面的概念都是在一个本地的git仓库里发生的
    可以通过git remote add命令把一个本地仓库和一个远端仓库(即服务器)联系起来,之后便可以通过git pushgit pull等命令来进行本地和远端之间的操作

  • HEAD
    HEAD指的是版本库里,最后的一次提交。

常用命令

配置

  • 添加用户名:git config --global user.name <用户名>
  • 设置用户邮箱: git config --global user.email <邮箱>

必须设置用户名和邮箱后,才可以git push等进行远端操作

杂项

  • 查看当前仓库状态:git status
  • 查看版本库记录:git log,每条提交记录会有一个hash值

暂存操作

  • 添加文件到暂存区:git add <文件或文件夹路径>(相当于VS Code里点击加号)
    如果执行git add .,则会递归地把当前目录下的所有文件添加到暂存区

提交操作

  • 提交修改:git commit -m <提交信息>
    这个操作会把暂存区里的所有修改一次性提交,但不会影响到工作区
  • 修改最后一次提交:git commit --amend -m <提交信息>,这回修改最后一次提交的提交信息
    如果执行这个命令式,暂存区里有内容,则会把当前暂存区的内容也一起合并提交进去
  • 撤销提交:git revert <commit hash>,hash值可以通过git log命令查看,是一个字符串
    这会把这一次commit之后的所有commit从版本库里撤销,commit的内容回到暂存区

比较操作

  • 查看工作区所做的修改:git diff
  • 查看暂存区和最后一次提交的差异:git diff --cached
  • 对比两次提交的差异:git diff <commit a hash>..<commit b hash>

以上三个命令,后接<文件路径>,可比较单个文件

撤销操作

  • 撤销暂存区的所有文件到工作区:git reset HEAD

  • 撤销单个文件/文件夹:git reset HEAD <文件/文件夹路径>

  • 把最后一次提交后所做的任何更改:git reset --hard HEAD
    详见git reset命令

  • 撤销单个文件:git checkout -- <文件路径>

  • 撤销某个提交后的所有提交:git reset <模式> <commit hash>
    这个命令适用于提交还没有发布到远端的情况

  • 用某个提交重新覆盖它之后的所有提交:git revert <commit hash>
    这个命令适用于提交已经发布到远端的情况,它的效果与reset的相似,但不是直接撤销,而是通过重新提交某个旧提交来覆盖它之后所做的修改

reset接受-soft--mixed--hard三种参数,默认是--mixed

  • --soft:只撤销提交,所撤销的内容内容出现在暂存区
  • --mixed:撤销提交和暂存,所撤销的内容出现在工作区
  • --hard:完全撤销,包括工作区,但不包括未索引文件(新建立的文件)

分支操作

  • 查看本地分支:git branch
  • 查看远端分支:git branch -r
  • 查看所有分支:git branch -a
  • 重命名当前分支:git branch -m <分支名>
  • 合并分支:git merge <分支名>,把某个分支的内容合并到当前分支
  • 重设分支的根基:git rebase <分支名>,把当前分支的所有提交暂存到某个地方,再把<分支名>所指的分支合并过来,然后再重新把那些暂存的提交应用上去。
    重新应用提交的过程中,如果有冲突,解决冲突后执行git rebase --continue
    过程如果出现错误,想退出rebase,执行git rebase --abort

结果中标星号的分支表示当前所处的分支

  • 切换分支:git checkout <分支名>
  • 新建分支:git branch <分支名>,分支将会在当前分支的状态下建立
  • 新建并切换到该分支:git checkout -b <分支名>,分支将会在当前分支的状态下建立
  • 删除分支: git branch -d <分知名>,把参数改成-D可以强制删除正常情下不允许删除的分支
  • 根据某个远端分支新建本地分支:git checkout -b <本地分支名> -t <远端分支名>
  • 设置本地分支的上游分支:git branch -u <主机名>/<远端分支名> <本地分支名>git branch --set-upstream-to=<主机名>/<远端分支名> <本地分支名>
  • 设置当前分支的上游分支:git branch -u <主机名>/<远端分支名>

存储操作

  • 存储修改:git stash,会把当前分支下的工作区和暂存区的内容存储到一个临时的地方
    可以通过git stash save <备注>来为本次存储添加备注内容
    注意,未索引文件不会被存储,必须先对其进行git add操作

  • 查看所有存储:git stash list

  • 提取某次存储的内容到当前分支:git stash apply stash@{<序列号>},提取后,该条存储依然存在

  • 提取某次存储的内容到当前分支并删除该条存储:git stash pop stash@{<序列号>},提取后,该条存储会被删除,无法再找回

  • 删除某次存储:git stash drop stash@{<序列号>}

以上条命令若不含stash@{<序列号>},默认会对最后的一次存储进行操作

远端操作

  • 克隆远端仓库:git clone <远端仓库地址> <本地目录名>

  • 连接远端仓库:git add remote <主机名> <远端仓库地址>,一般把远端版本库命名为origin

  • 修改主机名:git remote rename <原主机名> <新主机名>

  • 修改远端仓库地址:git remote set-url <主机名> <远端仓库地址>

  • 断开远端仓库:git remote rm <主机名>

  • 显示远端仓库信息:git remote show <主机名>

  • 获取远端的最新分支列表:git remote update <远端版本库命名>

  • 拉取远端分支到本地:git fetch <主机名> <远端分支名>

  • 推送本地分支到远端:git push <主机名> <本地分支名>:<远端分支名>

  • 拉取远端分支并合并到本地分支:git pull <主机名> <本地分支名>:<远端分支名>

以上两个命令,若本地分支为当前分支,当前分支名可省略
若本地分支已经设置了上游分支,远端分支名也可以省略
若远端仓库只有一个,主机名也可以省略

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

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,672评论 1 17
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,356评论 0 1
  • (一) “喂,奶奶么?” “嗯嗯,是我,是我,小飞呀,你快放寒假了吧,你啥时候回家呀,奶奶给你做好吃的呀,今年过年...
    小豆侠阅读 936评论 0 6
  • 单身,一个很有争议的词,有人说单身狗,也有人说单身贵族,但是具体单身是什么需要你我的态度决定! 对于单身来说...
    冯利鹏阅读 197评论 0 0
  • 1. 大学毕业前的暑假,没有考研打算的我忙着写论文,实习,找工作。家里人会经常问工作有没有着落,是留在读大学的城市...
    诺然yz阅读 10,125评论 155 374