Git:应用广泛的分布式版本控制系统
版本控制系统:保存某一时刻某些文件快照
分布式:每个计算机都将中央服务器的信息完整的复制到本地文件(中央服务器有远程仓库)
SVN:只保存变化的内容,用递增的方式提交版本号
GIT:保存完整的快照,用hash来计算版本号
GIT的三种状态:1.已修改 新建或者修改了某个已经存在的文件,并不打算提交
2.已暂存:讲已修改的文件包含下次提交的快照中,但是还没提
3.已提交:已经存在本地仓库中
连接远程仓库:Http每次交互需要输入用户名和密码
ssh 需要先在linux中输入 ssh-keygen一直按回车
根据路径去找到公钥,将公钥添加到ssh kyes中
Git命令:
git init:创建一个空的本地仓库或者重新初始化一个已经存在的本地仓库
git remote:管理相关的远程仓库
+ add origin url 在本地关联了一个远程仓库,这个仓库的名字为origin
也可以重命名,删除等等操作
git clone:可以将远程仓库的内容克隆过来,此时会自动生成一个本地仓库并且和远程仓库关联起来
我怎么用git clone 远程的所有分支:https://zhidao.baidu.com/question/264071541339121645.html
git status:显示工作区域的状态,如果只修改某个文件会显示未跟踪的文件
如果想让修改过的文件或文件夹不被git status提示,可以vi .gitignore 将不想被提示的文件或文件夹的名字输入进去
git add + 文件:将一个文件交给git跟踪(将一个文件从工作区域提交到暂存区域)
git reset HEAD + 文件 将一个文件从暂存区弄回到工作区
git commit -m "add message line 1" + 文件 可以将文件从暂存区提交上去 这里的-m是指可以在后面写一段话当做备注
可以通过get commit -am 完成add并提交的步骤
git push:将本地仓库推送到远程仓库,先push再merge,只有push了才能在网页中看到
-u origin dev 可以添加远程分支
git log:记录提交日志(本地远程都有,远程会与本地相同)
git reflog:记录所有的操作日志(只存在于本地仓库),比如切换分支log就没有 这个就有
git config:修改git配置信息 比如可以修改日志中我们的姓名,邮箱等
git diff:用来显示不同提交,不同区域,不同分支的差别
默认是显示工作区与暂存区之间文件的差异
+ --cached或--staged 会对比暂存区与工作区域的差异
git checkout -b dev:创建并且切换到dev分支(-b应该是没有就创建)
+ -- 文件名 可以将文件恢复成本地仓库的样子
+ 版本号 文件名 可以将文件恢复成某个版本的样子
HEAD 文件名 代表最近一次的提交
HEAD~ 文件名 代表上次提交
HEAD~2 文件名 代表上上次提交,以此类推
或者通过:git branch dev
git checkout dev 来创建别切换到dev分支
git branch:查看分支,当前分支前面会有个*
合并某分支到当前分支:git merge <name>(分支的名字)
删除分支:git branch -d <name>
git fetch:拉取远程仓库到本地仓库
git merge:合并分支
+ --abort 将这次合并取消
git cherry-pick +版本号 可以只与当前分支合并某次提交,而merge就会合并全部提交
git rebase:合并分支
与git merge的区别
上面是git merge 可以看出合并效果会比较乱
下面是git rebase 原本d和e都是dev分支的,合并后变成d'和e',最后是一条线,看起来比较整齐
git pull:会将远程服务器中所有的分支的内容都弄过来。
如果两个用户都从远程终端读取到信息,发生了冲突,那么后者需要git pull来获取,然后对发生冲突的文件进行手动解决冲突
再次push上去(commit 不需要加-m了),同时可以看完合并后的文件可以取消合并,手动修改不需要合并的地方
git reset --mixed HEAD~ 将本地仓库上一个版本的内容拷贝到暂存区 默认是这种情况
git reset --hard HEAD~ 将本地仓库上一个版本的内容拷贝到暂存区和工作区(没把握少使用)
git reset --soft HEAD~ 将HEAD这个指针指向上一个提交的版本,只改变指针的指向
git revert +版本号 可以去掉某次提交,需要一个界面显示可以先写入再退出
推荐使用这个,如果用git reset --hard HEAD~ 会将记录全都删除掉