git 中文乱码
输入:$env:LESSCHARSET=‘utf-8’ ide中输入:LESSCHARSET=utf-8
git 特点:
本地存有所有的记录快照,而不是比较差异。而且一般只添加数据。 所以:1.命令运行都比较快 2.通过任意本地快照都可以恢复git服务器数据 3.本地的任何操作只要提交到了本地快照中,基本没有无法恢复的情况
git 的三种状态(commited\modified\stage):
执行git status 就可以看到,在我的理解中文件应该还有两种状态 【modified】 - Changes not staged for commit 本地已修改,但还没有保存到数据库中 【stage】 - Changes to be committed: 本地修改后执行了 git add等,表示暂存 【commited】 - 本地已提交到了本地数据库中,可以执行git log --stat -1 查看文件 执行 git log -p -1 查看详情 【Untracked】 - Untracked files 未被跟踪的,执行git status 可以看到 【Ignore】 - 被排除的,还没有验证这个是否属于Untracked
git config 的三种级别
(local 【仓库配置,项目的.git文件种】> global【只针对当前用户】 > system【每一个用户以及每一个仓库的配置】) 优先级从左到右
git 命令
git help
git help <verb>
git <verb> help
man git-<verb>
git init 仓库初始化
git clone <url> 克隆
git status 查看仓库状态
git status --short 或者 git status -s 得到一种更为紧密的数除
git add <path> 跟踪新文件
查看已暂存和未暂存的区别 git status / git diff
查看已暂存即将提交的区别 git diff --staged 或 git diff --cached
git commit 提交更新
git commit -m "xxx" 提交
git commit -a 跳过暂存区直接提交(不建议用)
git commit -m "yyy" --amend 用本次更新覆盖上次的更新,很有用,可以用来改提交文字,增加提交文件,并且push之后只有一条commit记录,很整洁
git rm 移除文件
git rm <path> 从跟踪列表和本地同时移除该文件
git rm -f 强制删除,从跟踪列表删除,同时删除暂存和modified的文件
git rm --cached 从跟踪列表删除 但保留本地文件
git mv 移动或者重命名文件,重命名时注意大小写问题,本地仓库和服务器大小写敏感规则不一样的时候,很难搞
git log 查看提交历史,建议在各种命令后面带上-1,-2等,只查看最近1、2条
git log -p 或 git log --patch 以补丁方式输出
git log --stat -1 查看最近1次的提交,以统计的模式查看
git log --pretty 有以下几种格式oneline/short/full/fuller/format 例子git log --pretty=online
修改git add的文件
git commit --amend
git reset HEAD <filePath> 取消暂存file文件 会把staged的文件变成Changes not staged for commit
撤销对文件的修改(不可恢复)
git checkout <path>
git remote 查看远程仓库
git remote -v
本地分支和远程分支 本地分支:master 远程分支 origin/master 远程分支也是在本地的 只要更新他 他的HEAD就不会变
git fetch origin 更新远程分支
git push 推送
git push origin master
git tag 打标签
git 别名
例子: git config --global alias.last 'log -1 HEAD'
使用 git last
git 提交
git 是面向对象的,每一次提交会向数据库中保存这些内容
(1) Blob 提交的文件的快照A
(2)Tree 一个树对象(git中把每一个子目录的校验和保存为对象),这个树对象中包含指向提交的文件的快照的指针
(3)Comit Object提交对象, 包含作者、邮箱、树对象,父提交(上一次提交的指针)
每一个分支都指向最新的一次提交,并且自动向前移动
git branch 创建新分支 - 实际上就是在当前所在对象上创建了一个指针HEAD,指针HEAD指向本地的最新的分支
可以用 git log --oneline --decorate
git branch -b <new name> 在当前对象创建一个新分支并切换过去
git branch -d <branch name> 删除分支
git branch -v 查看所有分支 和 最后一次提交
git branch --merged 可以查看已经合并到当前分支的分支
git branch --no-merged 这个参数后可以增加参数 当不输入时代表当前分支
例如:查看未合并到master分支的分支有哪些呢? git branch --no-merged master
跟踪分支
在跟踪分支上执行git pull git会自动合并 我理解的跟踪分支就是跟远程的分支关联起来的分支
git clone时会自动创建跟踪分支
例子git checkout -b dd5401 origin/iteration_54_from_master_01 创建dd5402分支 并且跟踪远程分支
git checkout <分支名> 切换分支,建议先pull再拉取分支,执行了checkout之后,HEAD就指向了新分支
git merge
fast-forward 快进 如果这个分支的指针向前移动就可以进入到下一个分支,那么就进行快进,不会有冲突
git merge xxx 合并xxx的分支到当前分支
如果遇到冲突 比如 主分支master 在某次提交A 后分别有两个分支 branch1 和 branch2 ,当在branch1执行 git merge branch2的时候出现冲突
那么git会使用branch1和branch2的快照的共同祖先A, 这三个快照做一个简单的三方合并 合并后的分支有两个parent 一个指向branch1 一个指向branch2
在解决冲突时,可以用git status 查看冲突文件,当退出合并工具git会询问是否解决冲突,如果解决了会自动执行git add 把合并后的文件放到暂存区
|