目录
git初始化
git config --global user.name
git仓库创建后项目文件的三种状态
一旦git仓库被创建后,一个项目文件会处于三种状态。
已提交(committed)、已修改(modified) 和 已暂存(staged)
git add
追踪文件
文件被追踪后会存在两份,一份在暂存区,一份在文件夹
暂存区只会保存add时的文件,add之后再修改文件不会同步保存
git status
查看当前跟踪、修改等状态
git restore
还没提交到版本库,会撤回修改到暂存区版本
git log
查看提交历史
git commit -m “说明性文字”
提交当前状态并附上说明性文字
提交之后要重新跟踪
git commit --amend
重新提交,最终只会有一个提交——第二次提交将代替第一次提交的结果。
git checkout
git checkout 哈希字符串或者版本tag或者master,slaver,可以回到对应版本或者分支
不建议在历史版本作修改
一般用git checkout -b 切换并创建分支
git checkout --trace remotes/backup/user2,在远程分支user2下工作,会把user2分支拉下来成为一个本地分支
git branch
查看本地分支
git branch -a
查看远程分支
git clone
克隆仓库
git clone --bare
克隆一个仓库
–bare表示克隆一个裸仓库,不用来修改,只用来储存,本质是吧.git的隐藏文件夹复制过来,可以作为原创文件夹提交
git remote
查看当前仓库的远程仓库(不在当前目录下的仓库都是远程仓库)
git remote add
添加远程仓库
git remote rm
删除远程仓库
git remote show
显示远程仓库的详细信息
git merge
合并分支
git merge a b合并a,b分支到当前分支
git merge a合并a分支到当前分支
git diff
查看未暂存的改动
git diff --cached
查看在暂存区内的改动
git rm
从已跟踪文件清单中移除,取消add
git rm --cached
把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然保留在当前工作目录中
一些容易误解的地方
git log查看提交历史
git log查看提交历史,但是不同分支的提交历史是不同的。这个提交历史指的是当前分支的提交历史,而不是对远程仓库来说的提交历史
git pull和push
如果这两个命令不加分支,只加远程地址,应该默认是指当前分支。在master分支用git push backup不会提交user1分支。不要混淆了不同分支和远程与本地。在自己的分支下push怎么会影响别人的分支呢。
git push --set-upstream [remote] [branch]或者-u
和远程仓库的branch分支建立连接push上去
模拟多人使用git
在本地弄两个仓库用于模拟多人使用git,一个裸仓库用于储存
获取 Git 仓库
通常有两种获取 Git 项目仓库的方式:
将尚未进行版本控制的本地目录转换为 Git 仓库;
从其它服务器 克隆 一个已存在的 Git 仓库。
这里先用本地目录生成一个git仓库,然后再在另外一个目录克隆得到git仓库
本地目录生成git仓库
用git init在本地新建一个README.md文件并写入hello world,add之后文件加入到暂存区,commit之后提交
创建一个裸仓库
用git init --bare在另一个目录gitbackup创建一个裸仓库,把裸仓库添加为远程仓库(裸仓库一般不在本地),再从新目录克隆裸仓库
用git clone --bare从现有仓库克隆一个裸仓库
使用git remote add添加裸仓库作为远程仓库
从裸仓库克隆一个仓库
用git clone直接输入裸仓库地址即可,通过裸仓库克隆得到了原先的仓库
到这里准备好了两个仓库可以用作工程使用,一个裸仓库专门用于保管代码。
第一个仓库remote查看后是设定的backup
第二个仓库remote查看是origin
两个仓库模拟多人工作
第一个仓库编辑a,b文件,第二个仓库编辑b,c文件,先在不同分支上工作,再整合到master分支
注意
git branch只查看本地分支,如果本地分支不提交到远程仓库别人就看不到
在第一个仓库创建user1分支编辑a,b并提交到远程仓库
创建user1分支,编辑ab文件
然后将修改add,commit提交
用git push来推送到远程仓库
在第二个仓库创建user2分支编辑b,c文件,两个b文件不同并提交到远程仓库
此时远程仓库应有三个分支,master,user1,user2
两个仓库都通过fetch远程仓库同步数据
在使用fetch后远程分支不会自动出现在本地
如果想在远程分支user2下工作,可以用git checkout --trace remotes/backup/user2
可以看到user2的文件
第二个仓库的同步操作类似
将两个分支合并到master分支并处理冲突
在第一个仓库直接使用git merge合并user1和user2分支,不出意外的合并失败
此时目录内的文件情况
更改冲突文件后,按提示完成合并
其实应该是在master分支上执行git merge user1 user2就能直接完成。
最后在master中git merge user1,即可得到user1和user2合并分支
这里直接push报错了
按照提示建立远程master的跟踪,git push --set-upstream backup master
在第二个仓库拉下来看下效果
发现只有master分支,没有user1分支,不是理想效果,再回到第一个仓库把user1分支push上去
此处应该是pull命令如果不加分支默认是拉取远程的本地同名分支,因为这里是在user1分支下而之前没有提交user1分支,所以没有更新。
再次pull,可以得到全部的数据
使用ssh链接GitHub作为远程仓库
在GitHub中建立好仓库后,用git remote add 远程仓库名字 远程仓库地址即可
在GitHub上可以看到推送上来的master分支