Git Pro 笔记

基本须知

  • Git 文件流转的三个工作区域: Git的本地数据目录, 工作目录,以及暂存区域
  • Git 内只存在三种状态:已提交(committed,已安全地保存在本地数据库中) 、已修改(modified,修改了但还没保存提交)和已暂存(staged,已修改文件已放在下次提交时的清单中)


    Git Pro 笔记_第1张图片
    屏幕快照 2017-07-19 下午9.10.02.png

命令说明

基本操作

  • git init 对某个项目开始git管理
  • git add 告诉git开始对这些文件进行跟踪,或者把已跟踪文件放到暂存区,合并时把冲突表示为已解决

工作目录的所有文件只有两种状态:已跟踪、未跟踪。初次克隆某个仓库时,工作目录中的文件都属于已跟踪,状态为未修改

** 每次提交时检查当前状态 git status,查看是否改动都暂存了 **

  • git diff 查看尚未暂存的文件更新了哪些部分 不需要添加参数
  • git diff —cached 查看已暂存起来的文件和上次提交时的快照之间的差异
  • git commit 暂存后运行提交命令 -m 提交说明
  • git commit -a -m “update” 跳过使用暂存区域 ,会自动将所有已跟踪过的文件暂存起来

.gitignore

上传到 git 时忽略某些文件, 使用标准的glob模式匹配,即简化的正则表达式

  • “*” 匹配零个或多个任意字符
  • “[abc]"匹配任何一个在括号内的字符
  • “?”前一个字符可以不存在
  • “[0-9]”方括号的短横表示匹配范围
  • 匹配模式”/“说明要忽略的是目录
  • 忽略指定模式以外的文件或目录,在模式前加“!”取反

移除文件

必须从暂存的区域移除

  • rm 文件名 首先工作目录手工移除
  • git rm 文件名 再次运行暂存区域移除
  • git rm —cached 文件名 从git仓库中移除仍保留在当前工作目录中
  • git rm log/*.log 反斜杠表示使用git自己的文件匹配方式,会递归

移动文件

  • git mv file_from file_to

查看提交历史

  • git log -p 显示每次提交内容差异 -n 表示最近n次提交 —state 仅显示增改行数统计 —pretty=oneline —graph
    —since=2.weeks —author=“xiongjie"

撤销操作并重新提交

git commit —amend

取消已暂存文件

git reset HEAD

取消对文件的修改

git checkout — 放弃工作区域的修改

任何已提交到Git的数据都可以被恢复,你可能丢失的数据仅仅限于没有提交过的

远程仓库

git remote 列出每个远程仓库的名字, -v 显示对应的克隆地址
克隆项目后,git 默认用origin 来表示远程仓库
只有SSH URL 链接的仓库,可以推送数据

添加远程仓库并取简短名字

git remote add [shortname] [url]
如在本地添加远程项目pb: git remote add pb “url"

从远程仓库抓取数据

git fetch [remote-name]
可以在本地访问该远程仓库的所有分支,将其中某个分支合并到本地,或只取某个分支
如果克隆了一个仓库,会自动将远程仓库归于origin名下
git fetch origin 会自动抓取克隆项目

fetch 只是将远端数据拉到本地,并不自动合并到当前分支

git clone 自动创建了本地的master分支用于跟踪远程仓库的master分支

拉取数据

git pull 自动拉取
如果设置了某个分支用于跟踪远端仓库的分支,然后将远端分支合并到本地仓库的当前分支

推送数据到远程仓库

git push [remote-name] [branch-name]
克隆操作会使用默认的master origin名字
git push origin master

查看远程仓库

git remote show [remote-name]
会显示哪些远端分支还没有同步到本地,哪些已同步到本地但在远程服务器上已删除,以及运行git pull时将合并哪些分支

远程仓库的删除和重命名

git remote rename old_name new_name
对远程仓库的重命名会使对应分支名称发生变化
移除某个远端仓库
git remote rm res_name

打标签

git tag 列出现有标签
git tag name 轻量级打标签名

分支

使用分支意味着你可以在开发主线上分离出来,在不影响主线的同时继续工作

  • git branch name 新建分支

  • git checkout name 切换到分支中 -b 表示既新建了分支又切换当当前新建分支
    HEAD就指向了该分支,工作目录指向该分支,转换分支的时候保持一个清洁的工作区域

  • git checkout master git merge 分支名 合并到master分支

  • git branch -d 分支名 合并后删除分支

  • git merge master 在当前分支中合并master 分支

合并中处理冲突

  • 采用git status查看
    ===上半部分是HEAD,下半部分是被merge的分支
    解决冲突后,运行git add 标记为已解决, git commit 提交

  • git branch 列出全部分支清单
    *表示当前分支,-v查看各分支最后一个commit信息 —merge 已合并 —no-merged

推送

  • git push 远程仓库名 分支名
  • git push origin A: B 提取我的A并更新到远程仓库的B中
  • git fetch 抓取来的远程分支,无法在本地编辑,可以把内容合并到当前分支
  • git merge origin/name

新建本地分支

git checkout -b nameA origin/nameB
设置相同的名字简化 git checkout —track origin/nameB
跟踪分支
跟踪分支是一种与远程仓库分支有直接联系的分支

删除远程分支

git push [元成名]: [分支名]

把一个分支整合到另一个分支:merge、rebase

  • git checkout 分支名
  • git rebase master
    把分支里产生的变化补丁,打到master分支上
    先在一个分支里进行开发,当准备向主项目提交补丁时,再把它衍和到origin/master里
  • git rebase [主分支] [特性分支]

永远不要衍和那些已推送到公共仓库的更新

你可能感兴趣的:(Git Pro 笔记)