Learn Git

写的很混乱,复习用。

版本管理功能

回溯

git采用全量存储,类似于Content-addressable的文件系统。

.git目录:版本库存储不同版本的文件。

文件名:.git中的文件采用SHA1函数值(40位)作为文件名。

版本库与代码库的文件对应方式:使用树结构可描述文件名、目录结构及SHA1。类似于快照。

Commit(提交):提交记录快照、记录人信息及上一次提交的SHA1。

commit

暂存区(index):介于代码库和版本库中的缓冲区域。

以下为暂存区分别与代码库和版本库的状态比较:

Code 暂存区 SHA1 状态
不匹配 modified
不存在 removed
不存在 added
暂存区 .git SHA1 状态
不匹配 modified
不存在 missing
不存在 untracked

协同

push:将本地版本库的代码推送到服务器。

pull:将服务器端的代码拉取到本地。

分支

默认分支为master。

分支是指向提交的指针,可以在不同的分支上开发产生了新的提交,开发完成后就可以合并成主干了。

例如有两个分支如下图所示:

branch1

branch2

branch3

branch4

.git目录中有什么?

Git常用命令

git init                    //初始化项目
git add hello.txt           //文件从代码区放到暂存区
git reset HEAD -- hello.txt //文件从暂存区移出
git cat-file -p SHA1        //查看文件内容
git ls-files --stage        //查看暂存区index内容
git commit -m 'message'     //将暂存区数据提交到仓库,附带信息
git config --global user.name "Your Name"           //设置名字及email地址
git config --global user.email "email@example.com"  
git status                  //查看暂存区内容
git diff filename           //查看文件修改
git branch name             //创建分支
git checkout branch         //切换分支
git merge branch            //合并分支
git merge --abort           //恢复merge之前状态
git log                     //查看日志
git checkout SHA1           //回溯到SHA1值对应文件
git clone repo              //从服务器端拷贝一个项目
git remote                  //查看到所有关联到当前仓库的远程仓库
git remote show name        //查看远程仓库详细信息
git remote add name url     //关联本地仓库和远程仓库name为别名 url为远程仓库地址
git push name branch        //推送代码到远程仓库
git pull name branch        //从远程仓库拉取代码
git remote remove nanme     //删除远程仓库
git stash                   //将当前进行中的工作保存到一个暂存区域然后将当前目录回滚到上一次提交
git stash apply             //回滚git stash保存的工作
git stash list              //列出暂存区域保存的进行中的工作

附录

fatal: refusing to merge unrelated histories

Git远程同步Github代码 SSH Key是必须的吗

配置SSH

Updates were rejected because the tip of your current branch is behind

用SSH与GIthub建立联系

Git warning:LF will be replaced by CRLF