Git 是一个开源的分布式版本控制系统。
Git 工作区、暂存区和版本库
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
命令
基础命令
git init
初始化 当前所在的文件夹可以被管理且以后版本相关的数据会存储到.git文件中
git status
查看当前文件夹中是否变化 内容修改 新增文件 删除文件
git add .
将有工作区变化的文件加载到暂存区
git commit -m "备注"
将暂存区的修改全部提交到版本库
撤回修改和删除
git checkout -- data.txt
撤销修改,丢弃工作区的修改,分两种情况,-- 很重要,必须要加上
1、data.txt没有add到暂存区,撤销就是回退到和版本库一样
2、data.txt如果已经加到暂存区,撤销就是回退到和暂存区一样
git reset HEAD data.txt
把暂存区的修改撤销掉,重新放回工作区
git reset --hard HEAD
回退版本,HEAD当前版本
git reset --hard afe5aa
回退到版本号所指的版本 afe5aa版本号的前几位
使用场景:
1、当修改错了工作区的文件,想直接丢掉时,使用git checkout -- data.txt
2、当修改错了工作区的文件,并且已经add到暂存区了,想丢弃的话,
先使用git reset HEAD data.txt ,回到1的情况,再处理
3、修改的文件已经提交到版本库时,直接回退版本即可
手动删除data.txt后
1、确实要删除的话,就git rm data.txt 再commit,这样就彻底删除了
2、误删的情况,git checkout -- data.txt 就将版本库的文件恢复到工作区
3、第1中情况已经执行了 git rm data.txt,后悔了,可以执行git reset --hard HEAD回退版本
远程管理
当本地目录关联到远端的lifei库
git remote add origin git@github.com:lifei/lifei.git
将 本地的所有版本库推送到远端库
git push -u origin master
查看远端库信息
git remote -v
下载一份远端库
git clone git@github.com:lifei/lifei.git
从远端拉取最新的文件
git pull
分支
查看分支信息,当前分支前面会标一个*号
git branch
创建dev分支并且切换到
git checkout -b dev
分解成两个命令
git branch dev # 创建dev分支
git checkout dev # 切换到dev分支
切换分支用switch命令意思更明显
git switch master
创建并切换 tempdev
git switch -c tempdev
将dev合并到master
git merge dev
删除dev分支
git branch -d dev
冲突
如果dev 修改了data.txt,master分支也修改了data.txt,当切换到master后执行
git merge dev 就会冲突
Auto-merging selectp-dev-branch.py
CONFLICT (content): Merge conflict in selectp-dev-branch.py
Automatic merge failed; fix conflicts and then commit the result.
出现冲突后,查看冲突的文件
<<<<<<< HEAD
主分支
=======
dev 分支
>>>>>>> dev
日志
查看所有版本提交记录,版本号等
git log
查看分支的合并 时间图
git log --graph --pretty=oneline --abbrev-commit
查看详细的 合并图
git log --graph
git reflog 回退之前的版本后,又想撤销,查看之前的版本号
git stash 将当前工作区所修改的内容暂存到某个地方,将工作区还原到当前版本未修改过的状态