Git快速入门

虽然日常工作中经常使用git,但是在面对一些特殊情况时仍会捉襟见肘。在这里整理一些常见操作和常见问题。对于更详细的介绍,建议参考官方文档

简介

我们都知道,git是一个版本控制工具,而github、gitlab等则是基于git的代码托管平台。Git中比较常见的概念有仓库、暂存区、工作区、分支等。

安装和配置

  • 安装
    对于Ubuntu和Mac OS来说,可以通过简易的命令行来安装(aptbrew)。对于Windows来说,则需要手动下载安装,并通过Git Bash来交互,或者通过安装posh-git来实现在PowerShell中的集成。
  • 配置
    配置SSH-Key
    通常为了避免每次执行与远端仓库的操作的时候都需要验证,通常需要配置SSH-Key,通过SSH的方式与远端仓库进行通信。作为一种非对称加密方式,SSH-Key成对出现。
    首先需要使用如下命令生成钥匙对:
    ssh-keygen -t rsa -C "username@xxx.com"
    
    生成的钥匙对默认会存放在~/.ssh/id_rsa~/.ssh/id_rsa.pub两个文件中,需要将~/.ssh/id_rsa.pub(公钥)中的内容复制到Github或者Gitlab相应的位置。
    配置Git参数
    Git 自带一个git config的工具来帮助设置控制 Git 外观和行为的配置变量。
    当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com
    

基本操作

  • git clone:将存储库克隆到新的目录中。
  • git init:创建一个空的Git存储库或重新初始化现有的存储库。
  • git add:将当前变化存储至暂存区或者跟踪新的文件。
  • git reset:回到某一提交。
  • git rm:从工作树和索引中删除文件。
  • git log:显示提交日志。
  • git status:查看工作区的状态。
  • git branch:列出,创建或删除分支。
  • git checkout:切换分支。
  • git commit:提交变化。
  • git diff:显示提交和工作树之间的更改。
  • git rebase [COMMIT|BRANCH]在另一个基本提示之上提交,创建、列出标签。
  • git fetch:从另一个存储库下载对象和引用。
  • git pull:从另一个存储库或者本地分支中获取远程引用与关联对象并更新。
  • git remote:设置远端分支。(可以设置多个)
  • git push origin --delete <remote-branch>:删除远端分支。
  • git reset --hard:回退到上一次commit时的状态。
  • git reset --soft:回退到commit前的状态,保留暂存区文件的改动。
  • git checkout <file>:让某一个文件回退到commit时的状态。

大文件存储(Git LFS)

在一些工程中,可能会需要对一些大文件进行版本控制,比如二进制文件。如果像代码那样使用git进行管理,会导致工程文件空间过于庞大(git会默认存储所有的版本)。Git LFS应运而生。LFS是Large File Storage大文件存储的缩写,Git LFS是针对大文件存储开发的工具。
Git LFS可以通过apt安装。

sudo apt install git-lfs

在工程中,可以通过如下命令开启git lfs功能:

git lfs install

需要使用Git LFS存储的文件可以通过git lfs track命令,或者通过修改.gitattribute文件设置。比如:

git lfs track "*.iso"

.gitattributes文件同样需要被git跟踪:

git add .gitattributes

被跟踪的大文件可以像git下的其他文件一样跟踪、提交和推送:

git add file.iso
git commit -m "Add disk image"
git push

常见问题

忽略文件/目录

如果想在工程内忽略特定文件或目录(比如build目录),可以通过编辑.gitignore文件实现。注意,已经被跟踪的文件将不会被忽略。

管理多个SSH-Key

当本地有多个SSH-Key的时候,需要配置~/.ssh/config文件来区分不同Host使用的key,比如:

# ~/.ssh/config
#github
    Host github.com
    IdentityFile ~/.ssh/id_rsa_github
    User MyUserName

#gitlab
    Host gitlab.com
    IdentityFile ~/.ssh/id_rsa_gitlab
    User MyUserName

ssh-agent

ssh-agent是linux 系统上的一个程序,这个程序可以控制和保存公钥身份验证所使用的私钥程序。可以帮助我们管理ssh的密码。
启动方式如下:
eval `ssh-agent`
添加新的ssh-key:
ssh-add ~/.ssh/id_rsa
当 ssh-add 把私钥交给 ssh-agent 来管理时,其他程序需要身份验证的时候都可以申请交给 ssh-agent 来完成整个认证过程。(参考

config优先级

git config命令配置的变量存储在三个不同的位置:

  • /etc/gitconfig文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  • ~/.gitconfig~/.config/git/config文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
  • 当前使用仓库的 Git 目录中的 config 文件(就是.git/config):针对该仓库。

每一个级别覆盖上一级别的配置,所以.git/config的配置变量会覆盖/etc/gitconfig中的配置变量。

更改commit的作者信息

git commit --amend --reset-author

ssh相关:

ssh使用非对称加密。类似于github等平台,我们可以设置让本地与另一台电脑或服务器的ssh连接免密码:在对方电脑~/.ssh/目录下添加authorized_keys文件,里面输入本机的公钥。

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

推荐阅读更多精彩内容

  • 简介 Git是目前世界上最先进的分布式版本控制系统(没有之一)(用C写的)。 Git和其他版本控制系统如SVN的一...
    w_tiger阅读 608评论 0 1
  • Git 使用教程 一、Git 的安装 Windows版本 : 直接前往git官网下载msysgit安装包进行安装即...
    CeeYang阅读 579评论 0 2
  • Git是一个分布式的版本管理工具,分布式肯定会涉及到远程通信,下面我们来了解一下Git的远程通信协议。分布式通信需...
    郭艺宾阅读 1,601评论 2 0
  • git是什么? Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是...
    徐同学呀阅读 459评论 0 9
  • 大纲: 一、前言 二、概述 三、在Windows上安装Git 四、创建本地仓库 五、本地仓库管理详解 六、总结 注...
    首席架构师阅读 359评论 1 3