基本须知
- Git 文件流转的三个工作区域: Git的本地数据目录, 工作目录,以及暂存区域
-
Git 内只存在三种状态:已提交(committed,已安全地保存在本地数据库中) 、已修改(modified,修改了但还没保存提交)和已暂存(staged,已修改文件已放在下次提交时的清单中)
命令说明
基本操作
- 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 <file>
取消对文件的修改
git checkout —<filename> 放弃工作区域的修改
任何已提交到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 [主分支] [特性分支]
永远不要衍和那些已推送到公共仓库的更新