.git/objects/06/e21bb0105e2de6c846725a9a7172f57dd1af96 workspae项目的第一个版本(树对象)
.git/objects/56/0a3d89bf36ea10794402f6664740c284d4ae3b test.txt文件的第一个版本(git对象)
.git/objects/9d/74ec4055e0f1edc1921d749c250380ca7b5ebd workspae项目的第二个版本(树对象)
.git/objects/c3/1fb1e89d8b6b3ef34cdb5a2f999d6e29b822ba test.txt文件的第二个版本(git对象)
.git/objects/ea/e614245cc5faa121ed130b4eba7f9afbcc7cd9 new.txt文件的第一个版本(git对象)
git操作最基本的流程
创建工作目录 对工作目录进行修改
git add ./
git hash-object -w 文件名(修改了多少个工作目录中的文件 此命令就要被执行多少次)
git update-index …
git commit -m “注释内容”
git write-tree
git commit-tree
git高层命令(CRUD)
git init 初始化仓库
git status 查看文件的状态
git diff 查看哪些修改还没有暂存
git diff --staged 查看哪些修改以及被暂存了 还没提交
git log --oneline 查看提交的历史记录
git add ./ 将修改添加到暂存区
git rm 文件名 删除工作目录中对应的文件 再将修改添加到暂存区
git mv 原文件名 新文件名 将工作目录中的文件进行重命名 再将修改添加到暂存区
git commit
git commit -a
git commit -a -m 注释
将暂存区提交到版本库
git高层命令(分支)
git branch 显示分支列表
git branch 分支名 创建分支
git checkout 分支名 切换分支
git branch -D 分支名 强制删除分支
切换分支
最佳实践: 每次切换分支前 当前分支一定得是干净的(已提交状态)
坑:
在切换分支时 如果当前分支上有未暂存的修改(第一次) 或者 有未提交的暂存(第一次)
分支可以切换成功 但是这种操作可能会污染其他分支
动三个地方
HEAD
暂存区
工作目录
后悔药
工作区
如何撤回自己在工作目录中的修改 : git checkout --filename
暂存区
如何何撤回自己的暂存 : git reset HEAD filename
版本库
如何撤回自己的提交 : git commit --amend
1.注释写错了,重新给用户一次机会改注释
reset
git log :
git reflog : 主要是HEAD有变化 那么git reflog机会记录下来
三部曲
第一部: git rest --soft HEAD~ (--amend)
只动HEAD (带着分支一起移动)
第二部: git reset [--mixed] HEAD~
动HEAD (带着分支一起移动)
动了暂存区
第三部: git reset --hard HEAD~
动HEAD (带着分支一起移动)
动了暂存区
动了工作目录
checkout
git checkout commithash & git reset --hard commithash
1. checkout只动HEAD --hard动HEAD而且带着分支一起走
2. checkout对工作目录是安全的 --hard是强制覆盖工作目录
git checkout commithash
git checkout --filename
相比于git reset --hard commitHash --filename
第一 第二步都没做
只会动了工作目录
git checkout commithash <file>
将会跳过第 1 步
更新暂存区
更新工作目录
路径reset
git reset HEAD filename (reset 将会跳过第 1 步)
动了暂存区
远程分支
远程跟踪分支
本地分支
正常的数据推送 和 拉取步骤
1. 确保本地分支已经跟踪了远程跟踪分支
2. 拉取数据 : git pull
3. 上传数据: git push
一个本地分支怎么去跟踪一个远程跟踪分支
1. 当克隆的时候 会自动生成一个master本地分支(已经跟踪了对应的远程跟踪分支)
2. 在新建其他分支时 可以指定想要跟踪的远程跟踪分支
git checkout -b 本地分支名 远程跟踪分支名
git checkout --track 远程跟踪分支名
3. 将一个已经存在的本地分支 改成 一个跟踪分支
git branch -u 远程跟踪分支名
团队协作
1. 项目经理初始化远程仓库
一定要初始化一个空的仓库; 在github上操作
2. 项目经理创建本地仓库
git remote 别名 仓库地址(https)
git init ; 将源码复制进来
修改用户名 修改邮箱
git add
git commit
3. 项目经理推送本地仓库到远程仓库
清理windows凭据
git push 别名 分支 (输入用户名 密码;推完之后会附带生成远程跟踪分支)
4. 项目邀请成员 & 成员接受邀请
在github上操作
5. 成员克隆远程仓库
git clone 仓库地址 (在本地生成.git文件 默认为远程仓库配了别名 orgin)
只有在克隆的时候 本地分支master 和 远程跟踪分支别名/master 是有同步关系的
6. 成员做出贡献
修改源码文件
git add
git commit
git push 别名 分支 (输入用户名 密码;推完之后会附带生成远程跟踪分支)
7. 项目经理更新修改
git fetch 别名 (将修改同步到远程跟踪分支上)
git merge 远程跟踪分支
冲突
git本地操作会不会有冲突?
典型合并的时候
git远程协作的时候 会不会有冲突?
push
pull