Git教程

Git教程

Git基础

直接快照,而非保存差异

其他版本管理在每个版本记录每个文件与上一版本的差异信息。而git每个版本直接快照每个文件,如果文件未被修改则记录链接到上一快照的链接。比较差异则是比较两次快照。

文件状态管理

文件状态:未跟踪,已提交,已修改,已暂存。
文件区域:本地数据目录,工作目录,暂存区

Created with Raphaël 2.1.0 未跟踪文件 未跟踪文件 已暂存文件 已暂存文件 已修改文件 已修改文件 已提交文件 已提交文件 git add 做快照(保存到暂存区) 移除 提交(将暂存区快照转储到数据目录) 修改

git使用

初始化

配置信息分为系统级、用户级、仓库级。其中系统级配置文件在操作系统或安装目录的/etc/gitconfig中,用户级在操作系统的user/.gitconfig中,仓库级则在改仓库的.it/gitconfit中。
1. 在需要进行版本管理的仓库根目录下运行git init(之后的命令一般都在此目录下运行)
该命令会在目录下创建.git文件夹,其中包含配置信息等文件。
1. 表明身份
运行命令git config user.email "email@address.com"来指明邮箱地址
运行命令git config user.name "UserName"来指明称呼

注意该命令表明的身份仅在该仓库下有效,所保存的user信息也只在该目录下的.git/config文件中。
如果是git config --global user.email "xxxx"git config --global user.name "xxxx"则在本电脑中本用户下有效,配置信息也将保存到操作系统下的user目录下。
1. 指定默认文本编辑器(可选)
1. 指定差异分析工具(可选)
1. 查看配置信息
- 使用git config --list命令来查看配置信息。
如果看到同一个配置出现多次,则表示它可能在系统级或用户级均有设置,在本git仓库中只有最后一个生效。
- 使用git config user.name命令来查看指定配置信息

git add将文件添加到版本控制(跟踪文件)

  1. git add filename添加指定未跟踪文件到版本控制,或添加跟踪后已修改文件到暂存区
  2. git add .添加该目录下所有文件到版本控制

git commit提交修改

  1. git commit不带参数时会打开默认文本编辑器让输入提交说明(可以指定编辑器)
  2. git commit -m "infomation"带描述信息提交修改
  3. git commit -m "infomation -a"自动将已跟踪文件暂存,并提交修改
  4. git commit --amend将暂存区补交到上一次提交
    提交暂存区的信息。如果修改后未进行 git add,则该修改不会被提交。

git clone从现有仓库克隆

  1. git clone git://github.com/schacon/grit.git会在当前目录下创建一个grit文件夹,里面就是克隆下来的仓库了。
  2. git clone git://github.com/schacon/grit.git mydir较上面那个命令,将girt文件夹改名为mydir

git status仓库状态

  1. 执行git status命令后会返回一些信息,内容如下
    • Untracked files 列出未跟踪文件
    • Changes to be committed 列出已暂存需要被提交文件(当存在未跟踪文件时不显示此信息)
    • Changes not staged for commit 暂存或提交后被修改文件

忽略某些文件

创建.gitignore文件,将需要忽略的文件写在.gitignore中即可。
1. 支持简化正则表达式(*[]?
1. 以#开头表示该行为注释
1. 以/结尾表示忽略改文件夹

git diff比较差异

  1. git diff不加参数时比较的是未暂存和已暂存的快照差异
  2. git diff -cached比较的是已暂存和已提交的快照差异(同git diff -staged

git rm从git移除某个文件

  1. git rm filename将filename从暂存区移除(从版本管理移除)
  2. git rm filename -f如果要移除的文件修改过并add到暂存区,则需要加上-f参数
    注:上两条命令会将文件从本地删除
  3. git rm filename --cached从版本控制移除,但不删除文件(之后需要手动添加到.gitignore
  4. 此命令中的文件名参数支持简化正则表达式

git mv移动或重命名某个文件

  1. git mv file to new重命名“file”为“new”
    重命名会同时将文件重命名
    直接在外面修改文件名,再 git status提示旧文件被删除,新文件未跟踪;再 git add .之后提示文件重命名

git log查看提交历史(未完整)

  1. git log显示历史记录
  2. git log -2显示最新两次提交
  3. git log -p显示带内容差异的历史记录
  4. git log --name-only增加显示文件名
  5. git log --name-status增加显示文件名即文件操作
  6. git log --stat显示带增删行数的历史记录
  7. git log --shortstat相对--stat不显示具体每个文件情况
  8. git log --pretty=oneline每个提交信息在一行中显示
  9. git log --pretty=short不带日期
  10. git log --pretty=fullgit log
  11. git log --pretty=fuller增加提交人和提交时间
  12. git log --pretty=format:"%h - %an, %ar : %s"指定log格式
    • %H提交对象哈希串(完整)
    • %h提交对象哈希串(简短)
    • %T树对象的哈希串(完整)
    • %t树对象的哈希串(简短)
    • %P父对象的哈希串(完整)
    • %p父对象的哈希串(简短)
    • %an作者名字
    • %ae作者邮件
    • %ad作者修订日期,可用-date=定制格式
    • %ar作者修订日期,按多久以前的格式
    • %cn提交者名字
    • %ce提交者邮件
    • %cd提交日期,可用-date=定制格式
    • %cr提交日期,按多久以前的格式
    • %s提交说明
  13. git log --graph显示每个提交所在分支及分支的分化合并情况,推荐在单行情况下使用该参数
  14. 信息显示不完时会进入控制模式
    • q退出
    • 显示下一行

git reset

  1. git reset HEAD filename从暂存区取消filename
  2. git reset HEAD~3向回移动HEAD三个提交
    回退到历史注意记住当前commit的id,便于移动HEAD到将来
  3. git reset HEAD~向回移动HEAD一个提交(同上)
  4. git reset sha_id移动HEAD到指定commitID

git checkout之取消对文件的修改

  1. git checkout -- filename取消对文件filename的修改

远程仓库

git remote查看远程仓库

  1. git remote查看远程仓库
  2. git remote -v查看仓库对应的地址(同--verbose)
  3. git remote add origin giturl.git添加远程仓库giturl.git简称origin
  4. git remote show origin查看远程origin仓库的信息
  5. git remote rename pb pa将远程仓库pb重命名为pa
  6. git remote rm pb将远程仓库pb移除

git fetch从远程仓库抓取数据

  1. git fetch xxxx从远程仓库xxxx抓取数据(只是将远端数据拉倒本地,并不自动合并到当前工作分支)

git pull从远程仓库抓取数据

git push推送数据到远程

  1. git push origin master推送master分支到origin仓库
  2. git push origin v1.5推送标签v1.5到远程origin仓库
  3. git push origin --tags推送所有标签到远程origin仓库

git tag打标签

  1. git tag xxx创建一个不带附注的轻量级标签(不推荐)
  2. git tag -a xxx -m "yyy"创建一个附注为yyy的标签xxx
  3. git tag -s xxx -m "yyy"创建并使用私钥签署标签
  4. git tag -v xxx使用签署者的公钥验证已签署的xxx标签
  5. git tag查看现有标签
  6. git tag -l “v1.4.2.*”查看所有v1.4.2开头的标签
  7. git tag -a xxx yyyyyy -m "zzzz"为以前的提交打标签。yyyyy为需要假标签的提交的校验和,xxx为标签名,zzz为说明

git show显示当前信息

  1. git show显示最后一次提交信息
  2. git show xxx显示标签为xxx的提交信息

git技巧

自动补全

命令别名

本地分支

分支结构

  1. HEAD指针指向当前工作分支
  2. 分支指针指向该分支最后一次提交的commit对象
  3. commit对象包括
    • 指向上一次提交对象的parent指针(第一次提交没有)
    • 作者信息
    • 提交者信息
    • 指向提交文件目录树的指针
  4. 提交文件目录树
    • 一个目录树为一个Tree对象
    • 包括该目录下的文件快照和子目录树对象
  5. 文件快照
    • 一个文件快照为一个blob对象

git branch管理分支

  1. git branch列出当前所有分支(当前工作分支前有*
  2. git branch -v带最后一次提交信息的分支列表
  3. git branch --merge查看那些分支已经与当前分支合并
  4. git branch --no-merge查看那些分支未与当前分支合并
  5. git branch name在当前commit对象创建一个name分支
    创建分支并不会影响当前工作分支,需要手动将工作分支切换到新建的分支
  6. git branch -d name删除name分支
  7. git branch -D name强制删除name分支(比如name分支未合并时只能强制删除)

git checkout之切换工作分支

  1. git checkout name将工作分支切换到name分支(让HEAD指针指向name分支,将工作目录中的文件替换为name分支指向的文件快照内容)
  2. git checkout -b name新建并切换到name分支

git merge合并分支

  1. git merge name合并name分支到当前工作分支

远程分支

git fetch抓取远程仓库

git clone命令在本地建立记录远程分支的origin/master,与本地master分支
1.git fetch origin抓取远程仓库origin的master分支,更新本地记录的远程分支origin/master

git rebase衍合(未完整)

  1. git rebase master将master分支上提交的修改(从公共parent开始),在当前工作分支上重做一遍

将已有代码提交到github

  1. 添加.gitignore文件,添加忽略列表
  2. 执行git init初始化代码仓库
  3. 执行git config user.email ""git config user.name ""初始化配置
    不建议带--global参数,最好每个代码仓库使用独立配置信息
  4. 执行git add .添加全部内容到本地仓库
  5. 执行git commit -m ""提交当前代码到本地仓库
  6. 在GitHub上New respository(只填写Repository name即可)
  7. 复制网页上的https到剪贴板(不是浏览器地址栏,是在页面上的)
  8. 执行git remote add origin xxx添加远程仓库
    在命令行写到origin后按鼠标右键即可将剪贴板内容粘贴至此
  9. 执行git push origin master提交代码
    这里不建议使用-u参数。该参数表示以后的push``pull操作默认使用本次的远程服务器。建议每次执行命令都带上要操作的对象,不使用默认。
  10. 在网页上刷新一下即可看到提交结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值