Git仓库管理功能时GitHub的核心。Git属于分散型版本控制管理系统,是为版本管理而设计的软件。Subversion属于集中型版本管理控制系统。
两者选择
集中型:以Subversion为代表的集中型,将仓库集中存放在服务器之中,所以只存在一个仓库。集中型将所有数据集中放在服务器中,有便于管理的优点。但是一旦开发者所处的环境不能连接服务器,就无法获取最新的源代码,开发也就无法进行。服务器宕机时也是同样的问题,服务器故障导致数据消失,开发者无法找到最新的源代码。
分散型:GitHub仓库Fork给了每一个用户。Fork就是将GItHub的某个特定仓库复制到自己的账户下。Fork出的仓库与原仓库是两个不同的仓库,开发者可以随意编辑。
Git初始化设置
设置姓名和邮箱地址
git config --global user.name "XXX"
git config --global user.email "XXX@XX.com"
想要修改这些信息可以直接修改文件.gitconfig
提高命令行输出的可读性
git config --global color.ui auto
基本操作
git init初始化仓库:Git使用git init命令进行初始化。使用该命令之前先创建一个目录。
mkdir git-study
cd git-study
git init
执行完命令之后会生成.git目录,存储者管理当前目录内容所需的仓库数据。将 git-study这个目录的内容称为“附属于该仓库的工作树”。
git status查看仓库的状态:工作树和仓库在被操作的过程中,状态会不断发生变化。
git add向暂存区中添加文件:将文件变成Git仓库的管理对象,暂存区是提交前的的一个临时区域。
git commit保存仓库的历史记录:将当前暂存区的文件实际保存到仓库的历史记录中。
git log查看提交日志:只显示提交信息的第一行可在命令后添加 --pretty=short;只显示指定目录、文件的日志可在命令后添加目录和文件名;显示文件的改动可在后面添加-p.
git diff查看更改前后的差别:可以查看工作树和暂存区的差别
分支操作
git branch显示分支一览表:“*”所在的分支表示当前所在的分支。
git checkout -b创建、切换分支:
切换到future-A分支并进行提交
git checkout -b future-A
切换到master分支
git checkout master
切回上一个分支
git checkout -
git merge合并分支:先切换到将要合并到的分支,然后执行创建合并提交。
git checkout master
git merge --no-ff future-A
git log --graph以图表形式查看分支
更改提交的操作
git reset回溯历史版本:
回溯到创建future-A分支前,要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要使用git reset --hard后面跟随目标时间的哈希值;
创建fix-B分支;
git checkout -b fix-B
推进至feature-A分支合并后的状态;
使用git reflog命令,查看当前仓库的操作日。通过 git reset --hard命令恢复到回溯历史前的状态。
消除冲突
git merge --no-ff fix-B
查看冲突部分并将其解决:务必要仔细分析冲突部分的内容后在行修改。
提交解决后的结果
git add
git commit
git commit --amend修改提交信息:进入日志信息后修改内容
git rebase -i压缩历史
推送至远程仓库
git remote add添加远程仓库
git push推送至远程仓库
推送至master分支
推送至master以外的分支
从远程仓库获取
git clone获取远程仓库:
获取远程仓库
获取远程的feature-D分支
git chackout -b feature-D origin/feature-D
其中-b参数的后面是本地仓库中新建分支的名称。
向本地的feature-D分支提交更改
git diff
推送feature-D分支
git push
git pull获取最新的远程仓库分支