什么是git? 有什么作用? 如何初始化一个本地仓库
git, 分布式版本控制工具 可以实现软件的版本控制,在多个版本之间切换; 可以实现多分支开发,提高开发效率; 可以实现历史记录,历史状态的恢复; 团队内部实现权限管理等。 初始化本地仓库: 项目根目录下git init
Git 与 SVN 区别点:
-
Git 是分布式的,SVN 是集中式:这是 Git 和其它非分布式的版本控制系统,最核心的区别,例如 SVN,CVS 等
-
Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
-
Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
-
Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
-
Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
git基本操作
创建仓库
在==项目根目录下==执行如下:
git init
或者直接克隆远程仓库:
git clone url
配置签名
==局部配置==
git config user.name "自定义名"
git config user.email "自定义邮箱"
==全局配置==
git config --global user.name "donghaiming"
git config --global user.email "haiming_dong@126.com"
提交版本
# 将test.txt文件增加到暂存区
git add test.txt
# 将所有文件增加到暂存区
git add ./
# 提交版本 到本地仓库
git commit -m '版本号或描述信息'
查看日志
git log git log --oneline # 日志过长时,按行显示 git reflog # 历史操作
版本回退
git reset --hard HEAD^ # 回退到当前版本的前一个版本 HEAD^^表示回退到当前版本的前两个版本 git reset --hard HEAD`1 # 回退到当前版本的前一个版本 HEAD`5表示回退到当前版本的前5个版本 git reset --hard 版本号序号 # 回退到指定的版本
查看状态
git status
撤消 工作区 的修改
git checkout -- <文件名>
撤消暂存区的修改
git reset HEAD <文件名> # 先撤消暂存区的修改,从暂存区撤回 git checkout -- <文件名> # 再撤消工作区修改
对比文件的内容
对比本地仓库(HEAD) 与工作区文件的差异
git diff HEAD -- <文件名>
对比两个版本之间某个文件的不同
git diff HEAD HEAD^ -- <文件名>
删除文件
rm <文件名>
查看分支
git branch -v
创建分支
# 创建分支,不切换 git branch <分支名> # 切换分支 git switch <分支名> or git checkout <分支名> # 创建分支,并切换 git checkout -b <分支名> # 创建dev分支,并切换 git checkout -b dev
合并分支到主分支
# 1. 切换到主分支 git checkout master # 2. 合并分支dev 到主分支 git merge dev
==注意:合并分支内容需要先切换到主分支上==
删除分支
# 删除一个分支 git branch -d <分支名> # 删除dev分支 git branch -d dev
查看合并后的日志
git log --pretty=oneline
解决合并冲突
某分支和master中同一个文件都有改动时
,合并该分支到主分支时会有冲突,如下:
解决方案:
在master主分支上,使用vim打开冲突的文件,会看到如下内容:
手动删除冲突的符号,得到如下内容:
保存退出,esc 然后 shift + zz
将冲突文件增加到暂存区,git add 文件名
提交到本地仓库, git commit -m '描述'
bug分支
软件开发中,bug就像家常便饭,有了bug就需要修复,在git中,由于分支
功能强大,所以, 每个bug都可以通过一个新的临时分支
来修复,修复后,合并分支,然后将临时分支删除。
接到一个修复bug的任务,当手头的工作还没有完成时,git中还提供了一个stash功能, 可以把当前工作状态保存起来,等修复完bug后,再恢复状态继续工作。
git stash # 保存工作现场(添加到暂存区的文件,尚未提交到本地仓库) git stash list # 列出工作现场 git stash pop # 恢复工作现场