版本控制工具(两类区别)
集中式:svn采用增量式管理
分布式:git采取文件系统快照的方式。
获取帮助
git help <verb>
git <verb> --help
man git-<verb>
例如:输入git help config获取config命令的手册,这些命令很棒,
因为你随时随地可以使用而无需联网。
初始化
git init
该命令将创建一个名为.git的子目录,这个子目录含有你初始化的
Git仓库中所有的必须文件,这些文件是git仓库的骨干。
签名
项目/仓库级别:仅在本地库中有效
系统用户级别:登陆当前操作系统的用户范围
采用就近原则,两者都有时采用项目级别。
具体命令:
git config --global user.name "your name"
git config --global user.email "your@example.com"
三种状态
1.工作区:在这里写文件,使用git status查看为红色。
2.暂存区:使用git add <file>将工作区的文件添加到此,为绿色。
3.Git仓库:使用git commit <file> -m "注释"将暂存区内容提交。
查看状态:git status
日志
使用git log查看完整的日志信息,但是信息条数太多看着就很费劲。
使用git log --pretty=oneline在一行中显示一条信息(完整hash值)。
使用git log --oneline更简单的显示,hash值截取前七位。
使用git reflog比上一个多显示了到某版本需移动几步。
版本控制
1.基于索引值
git reset --hard [局部索引值]
索引值显示:git reflog
2.使用^符号(只能后退)
git reset --hard HEAD^^ 后退几步则几个^
3.使用~符号(只能后退)
git reset --hard HEAD~3 后退几步写数字几
reset三个参数对比
1.--soft
仅仅在本地库移动HEAD指针。
2.--mixed
在本地库移动HEAD指针;重置暂存区。
3.--hard
在本地库移动HEAD指针;重置暂存区;重置工作区。
删除文件的找回
1.git restore [file] Git仓库->暂存区->工作区
2.git reset --hard HEAD 跳到指针指定位置
比较文件
1.git diff [file]
将工作区文件和暂存区比较。
2.git diff [索引hash] [file]
将工作区文件与本地库历史记录比较。
不带文件名则比较多个文件。
分支
1.好处:
Ⅰ.同时进行多个功能的开发,提高效率。
Ⅱ.各个分支开发过程中,若某分支开发失败,对其他分支不影响。
2.创建分支:git branch [分支名]
3.查看分支:git branch -v
4.切换分支:git checkout [分支名]
5.合并分支:
Ⅰ.切换到接受合并的主分支
git checkout [被合并分支名]
Ⅱ.执行合并命令
git merge [有新内容的分支名]
6.解决冲突:
Ⅰ.当多个分支更改同一文件时,会产生冲突,需要手动合并。
Ⅱ.打开冲突文件,"<<HEAD"和"="中间的内容为当前分支修改的;
"=“和”>>[分支名]"中间的内容为另一个分支修改的内容。
Ⅲ.手动保留一方修改的内容,另一方的内容和特殊符号全部清除。
Ⅳ.然后执行git add [file]将文件添加到暂存区。
Ⅴ.最后使用git commit -m "note"添加到仓库,注意不需要文件名。
hash算法
1.输入不同数据,若使用同一个hash算法,其结果长度相同。
2.输入的数据不变,可以保证其输出不变。
3.输入的数据有变化,其输出有变化,通常变化较大。
4.哈希算法不可逆。
远程操作
1.给远程库起别名
git remote add <name> https://github.com/haobye
查看:git remote -v
含义:fetch指取回,push指推送
1.1.补充
git remote show <远程库别名> 查看该库详细信息
git remote add <别名> <git网址> 对远程库设置别名
git remote rm <远程库别名> 删除其远程库别名
git remote rename <旧名> <新名> 重新设置别名
2.推送
git push <name> master
推送master分支
3.克隆
git clone https://github.com/haobye
邀请成员加入团队,才可以共同进行操作,即以下几步。
邀请成员的方法请移步查看
远程库的拉取
1.将远程库的更新全部取回到本地:
git fetch <远程库别名> <远程分支名>
1.1.查看取回的内容:
git checkout <远程库别名/远程分支名>
切换到内容更新的分支,查看其下文件即可。
2.在本地分支上合并拉取的远程分支:
git merge <远程库别名/远程分支名>
3.远程库更新拉取并与本地合并:
git pull <远程库别名> <远程分支名>
关系为pull=fetch+merge,相当于合并执行。
协同开发的冲突
如果不是基于最新版的修改,不能推送push,必须先拉取pull。
拉取下来如果进入冲突状态MERGING,则按照<p id="clash">分支冲突</p>解决即可。
SSH登陆
如果没有凭据管理器,可以设置使用ssh,不用每次push都需要用户名密码,
为我们简化操作。
进入家目录:cd ~
删除.ssh目录:rm -rvf .ssh
生成.ssh密钥目录:ssh-keygen -t rsa -C git@github.com:haobye/test.git
将其目录下的id_rsa.pub的内容复制到GitHub上
(用户头像-Settings-SSHandGPGkeys-New SSH key):
cat .ssh/id_rsa.pub (title为标题,Key则放入复制的内容)
加入别名:git remote add ssh_test git@github.com:haobye/test.git
即可使用ssh连接:git push ssh_test master