git命令的使用
初始化仓库
- git init //初始化仓库(本文件) git init yourdir(指定文件)
初始化仓库之后就可以看到文件夹之中生成了一个隐藏的文件 .git
仓库会记录你所有的变更行为
提交 Commit
- git status 查看当前仓库的状态信息
- git add 将文件加入暂存区 该文件会变绿(之前为红色)
- git add . 可以将所有文件都加入暂存区
- 提交变更 gti commit -m <信息>
- git log 查看日志 可以看到什么人什么时间提交了一个什么commit(-m 的信息)
每一个commit都可以生成一个16进制的值 commit xxxxxxxxxxxxxx (HEAD -> master) ==
- 修改一个文件之后 git status 会看到该文件变为了红色 (红色的文件代表着有新的变更)
之后重复 添加暂存区 提交一个commit 通过log可以查看到已经提交了
- 当你变更文件时 需要通过git add 将变更的文件添加到暂存区(让文件变绿),再使用commit 提交这一次的变更到仓库
git commit 只提交那些绿了的文件,也就是 git add 添加到暂存区的文件
add 之后后悔了
- git reset
add之后后悔了,觉得这次提交不该包含它。 在commit之前,可以使用git reset 将绿色的文件重新变为红色(将文件从暂存区释放出来)
文件的状态 (Untracked Unmodified Modified staged)
新建一个文件时,文件处于Untracked状态
- Untracked 通过 add Staged
- Staged 通过 commit Unmodified
- Unmodified 通过修改文件 Modified
- 如果文件有过commit记录 则它的状态为 Modified
- 已经commit的文件内容和现有的文件内容之间对比 如果是一致的则为Unmodified (只要文件提交过,状态就是Unmodified)
git 的alias 可以自定义参数的写法
回退
- 如果你想要回退到某次提交时的内容 可以通过 git reset --hard
- git reset的参数 --hard 不保存所有变更 --soft 保留变更且变更内容处于Staged --mixed 保留变更且变更内容处于Modified
- 如果git reset的参数不写 默认为 --mixed
回退之后回退前的git log记录消失了
如果后悔了怎么办? 此时的 git log 已经不显示最新的版本了
这是可以使用 git relog查看所有的记录
还有一种方法就是 git pull
- 使用全部和前七位都是可以的
分支
- master 初始化仓库是自动生成的一个默认分支 通常master作为主分支
- git checkout -b 创建新的分支 name为新分支的名字 template为指定哪一个分支或者commit为模板 如果第二个参数不填,则使用当前分支为模板
模板是什么? 分支之中的commit会记录在当前的分支,如果我们以这个分支为模板,新建一个分支,该分支的commit记录会继承模板分支的 创建分支之后,各个分支之间的改动都和其他分支不再有关系
- 使用 git checkout master 可以切回master分支
- git branch 查看所有分支 高亮的分支表示我们当前所处的分支
使用切换分支来切换不同的版本很方便
合并(Merge)
- 有时候我们需要合并其他分支的变更 可以使用 git merge 合并分支变更(分支的变更,而不是分支的内容)
- 合并代码之后可能会产生冲突,此时需要你手动或者通过其他IDE来解决冲突
- 流程:master切出一个分支为1.0.0 小a从1.0.0切除一个分支 然后修改代码,提交 。小b也从1.0.0切除一个分支 然后修改代码,提交 。然后我在1.0.0分支合并代码 解决冲突,然后在提交commit
远程仓库(Remote)
- 远程仓库作为中央仓库来管理所有的分支
- 使用git clone 将远程仓库下载到本地
- 使用git push 推送到远端仓库
git push -set-upstream origin bc-a 表示设置上流分支 将远端仓库的bc-a分支作为本地bc-a分支的上流分支 远端仓库没有bc-a分支则新建一个bc-a分支给远端仓库
- git fetch 拉取远程仓库信息 然后可以获取远程仓库的分支 然后就可以切换远程仓库有而本地没有的分支
- 如果本地切的分支在远程仓库上 那么 git checkout -b origin 需要加上origin
git pull
- 当远程仓库的一个分支修改之后,想要在本地也得到相应的修改
- 先 fetch 再 merge
变基(Rebase)
- 重新排列 commit 采用枚举重新排列
- master 为 1-2 bc为master切下来的分支 bc 为 1-2 master修改了变为 1-2-5 bc修改为 1-2-3-4
- 通过rebase可以重新排列commit 变为 1-2-5-3-4
- git rebase master 解决冲突 然后 git rebase master --continue 继续排列下一个分支commit