Git学习笔记

写在前面
  • 本文档是学习 廖雪峰Git教程 后所做的笔记,教程帮忙很大,非常感谢!
  • 本笔记主要记录了教程中所用的命令,概念内容不包括在内。
  • 建议看完教程后再看Git官网的 Pro Git 一书。
  • 最后附上本人的 GitHub ,感谢拨冗翻阅拙作,敬请斧正。
创建版本库
git init  #初始化所在目录为Git仓库

初始化的目录可以不为空

添加文件到版本库
git add <file> ...  #添加文件到暂存区(stage)
        -f <file> ...  #强制添加到暂存区(可用于添加忽略文件)
git commit -m "提交说明"  #从暂存区提交到版本库

git add 命令可多次执行,然后commit一次。

时光机穿梭
  • 查看状态、差异
git status  #查看仓库当前状态
git diff [file]  #比较工作区和暂存区的差异
git diff --cached [file]  #比较暂存区和版本库的差异
git diff HEAD -- [file]  #比较工作区和版本库的差异
  • 版本切换
git log  #查看提交历史
git log -1  #查看最后一次提交信息(-2 则是最后两次)
git log --pretty=oneline  #单行格式显示提交历史
        --graph  #显示分支合并图
        --abbrev-commit  #简写的commit_id
git reflog  #查看所有操作记录,包括删除的commit记录
git reset --hard HEAD^  #回退到上一版本
# HEAD 表当前版本, HEAD^ 表上一版本,HEAD^^ 表上两版本,HEAD~99 表上99版本。
git reset --hard commit_id  #切换到指定版本

Git跟踪管理的是修改,而非文件

  • 撤销修改
git checkout -- <file>  #撤销工作区的修改
git reset HEAD <file>  #撤销暂存区的修改

若已commit但没提交到远程库,可用版本回退进行撤销

  • 删除文件

    • 方法一:工作区删除文件,然后正常提交
    rm <file> ...  #工作区删除
    git add <file> ...  #将修改提交至暂存区
    git commit -m "说明"  #提交到版本库
    
    • 方法二:直接命令删除工作区和暂存区,然后提交版本库
    git rm <file> ...  #删除工作区和暂存区文件
    git commit -m "说明"  #提交到版本库
    

删除、增加文件也都属于修改

远程仓库
  • 创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"  #生成的Key在家目录.ssh文件夹里面,pub后缀是公钥,另一个是私钥。
  • 添加远程库
git remote add origin git@server-name:path/repo-name.git  #添加远程仓库
git remote  #查看远程库信息
           -v  #显示详细信息
git push -u origin <branch>  #推送并关联指定分支到远程库

除第一次关联,之后push不用加-u选项

  • 从远程库克隆
git clone git@server-name:path/repo-name.git  #将远程仓库克隆到当前目录
git pull  #拉取远程仓库内容同时自动merge
git fecth #从远程获取最新版本到本地,不会自动merge

-git fetchgit pull的区别:在实际使用中,git fetch更安全一些因为在merge前,我们可以查看更新情况(git log,git diff),然后再决定是否合并

分支管理
git branch <branch>  #创建分支
git checkout <branch>  #切换到指定分支
git checkout -b <branch>  #创建并切换到该分支
git branch  #查看现有分支
git branch -d <branch>  #删除指定分支
git branch --set-upstream <branch_local> <branch_remote>  #指定本地分支与远程分支的链接
git merge <branch>  #合并指定分支到当前分支
          --no-ff <branch>  #禁用快速合并
git merge --no-ff -m "提交说明" <branch>  #普通方式合并,并附提交说明
git stash  #保存当前工作环境(包括工作区和暂存区)
git stash list  #查看保存的工作列表
git stash apply [stash@{X}]  #恢复工作状态,但不删除stash内容
git stash pop [stash@{X}]  #恢复工作状态,并删除stash内容
git stash drop [stash@{X}]  #删除stash内容
git branch -D <branch>  #强制删除分支(常用于未合并的分支)

HEAD不是直接指向提交点,而是指向分支,分支再指向提交点

  • 多人协作
##error: failed to push some refs to ...
1. git pull 远程库
2. 解决冲突(若有),再push
  • 分支管理策略图
标签管理
git tag  #查看现有标签
git tag <tag_name>  #给当前所在的commit打标签
git tag <tag_name> <commit_id>  #给指定commit打标签
git tag -a <tag_name> -m "标签说明" <commit_id>  #给指定commit打标签,并附说明
        -s <tag_name> -m "标签说明" <commit_id>  #用gpg私钥签名
        -d <tag_name>  #删除标签
git show <tag_name>  #显示标签信息
git push origin <tag_name>  #推送标签到远程库
git push origin --tags  #推送所有未推送的标签到远程库
git push origin :refs/tags/<tag_name>  #删除远程标签(先删除本地,再使用该命令删除)
自定义Git
git config --global user.name "you_name"  #设置全局用户名
git config --global user.email "email@example.com"  #设置全局邮箱
git config --global color.ui true  #设置全局颜色显示
git config --global alias.<alias_name> <'command_name'>  #设置别名
  • 忽略特殊文件

    1. 工作区创建.gitignore文件
    2. 内容举例,如下:
    #Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
    
    #Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    #My configurations:
    db.ini
    deploy_key_rsa
    
git check-ignore -v <file>  #查看忽略该文件的规则

规则有错时常用上述命令查找定位

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

推荐阅读更多精彩内容