git 版本库学习

第一课


先新建一个文件夹,在目录下右键——
git bash进入命令行,
git init 创建一个空仓库(a empty repository),
git add xxx.xxx 将文件添加到仓库 ,
git commit -m"xxxxxx" 将文件提交到仓库 双引号内是该文件的描述,
git status 可以查询当前仓库情况,随时关注工作区状况。

第二课


git diff 可以查看修改的内容,
git log 查询提交日志 (直接按q(无需回车)可退出git log命令),
如果后面加上 --pretty=oneline 可以让信息显示在一行,
git reset --hard HEAD^ 可以回退到之前的版本,^表示上一个版本,以此类推 可以有 ^^^^^.......
如果回退的版本太多 可以用 HEAD~100
git reset --hard (commit id) 括号是不用加上去的,
git log 可以查看commit id,reset的时候可以不用全写,可以只写前几位数,
**git reflog 用来记录你的每一次命令。

第三课


工作区
在第一课里所创建的文件夹即为一个工作区。

git 版本库学习_第1张图片
image

版本库
在工作区目录下有一个.git的文件夹。
git 版本库学习_第2张图片
image

其中的index(也叫stage)即为暂存区,以及系统自动创建的分支master和一个指向master的指针head。

暂存区
第一步是用
git add把文件添加进去,实际上就是把文件修改添加到暂存区。
第二步是用
git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
也就是说git add可以将所有修改先放到暂存区 再用git commit将修改一次性提交到分支。

第四课


假如你修改了一个文件 那么你可以使用
git checkout -- xxx.xxx可以丢弃工作区的修改。
即:
-如果修改后还未添加到暂存区(即未git add),可以直接回退到修改前版本
-如果已经添加到暂存区,然后又修改了 可以回退到添加到暂存区时的版本。

第五课


rm xxx.xxx 可以删除文件(从工作区删除),
如果误删 可以用
git checkout -- xxx.xxx 恢复,
git checkout 其实是用 版本库 里的版本替换 工作区 的版本
如果不是误删 而是要确认删除 用
git rm xxx.xxxgit commit -m"xxx" (顺便提交到版本库)

第六课


远程仓库
第1步:创建SSH Key。
在用户主目录下(C盘用户名下)看看有没有.ssh目录以及这个目录下有没有id_rsa(私钥)和id_rsa.pub(公钥)这两个文件, 如果已经有了,可直接跳到下一步 ,如果没有,打开Git Bash,创建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

第2步:登陆GitHub,打开“settings”,“SSH Keys”页面
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key。

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

GitHub允许你添加多个Key。假定你有若干电脑,在不同的地点提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
第3步:添加远程库
先在github上新建一个repository 然后将本地仓库与远程库关联

$ git remote add origin [email protected]:Zeng1998/learngit.git

其中的origin是远程库的名称 learngit是git仓库的名称(关系暂不明)

第4步:把本地库的所有内容推送到远程库上/把远程库的内容克隆到本地:

$ git push -u origin master

出现Enter passphrase for key '/c/Users/威少/.ssh/id_rsa':
需要输入密码(输入时不会显示出来,确定输入正确后回车,无法删除)
用git push命令将本地库内容推送到远程库,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
此后,每次本地提交后,只要有必要,就可以使用命令

$ git push origin master

推送最新修改。

$ git clone [email protected]:Zeng1998/xxx.git

此命令可以将远程库的内容克隆到本地

第七课


分支管理有利于团队的协作,每个人在自己独立的分支上编写代码,互不干扰,最后才将不同的分支合并起来。
HEAD指针指向当前分支(比如我们只有一个master分支,那HEAD即指向master,而master指向当前提交),当创建一个新的分支dev时,即创建一个指针dev指向和master指向相同的当前提交,HEAD再指向dev,表示当前分支为dev。
分支合并,相当于将master指向dev的当前提交,合并完成后可以将dev分支删除。

具体操作
git checkout -b dev 表示创建并切换到分支dev,相当于

  • git branch dev
  • git checkout dev

git branch 可以查看所有分支,带*号的是当前分支。
git merge dev 表示将dev分支合并到当前分支。
git branch -d dev 删除dev分支。

第八课

合并冲突处理
上一课中,当dev分支文件修改时,master分支并没有修改,所以只要将master指针指向dev当前指向即可(即Fast-forward)。
[图片上传失败...(image-9b58bf-1509974804706)]
如果dev分支和master分支同时对一个文件进行了修改,在回到master分支进行合并时会出现冲突警告。

$ git merge dev
Auto-merging xxx.xxx
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

这时候直接本地查看该文件

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev

会显示出现冲突的地方,这是后将该文件修改为统一的数据,再git add和git commit提交。
[图片上传失败...(image-9bd2bc-1509974804706)]
会自动将dev分支合并到master分支上,这时候就可以将dev分支删除。

git log --graph命令可以看到分支合并图。(q退出)

第九课


前面讲到了fast forward,主要适用于创建一个新的分支后master分支没有做任何修改,合并的时候直接将master指针指向分支最新commit。
如果禁用fast forward,即
$ git merge --no-ff -m "xxx" dev(分支)
如图所示
[图片上传失败...(image-e1aa33-1509974804706)]
即合并时创建了一个新的commit。

第十课


git slash 可以将手头工作区的工作暂时保存起来。
git slash list 查看当前保存的内容。
git slash apply可以将保存的工作区恢复(但不删除)。
git slash drop 可以将保存的内容删除(恢复后)。
git slash pop 可以直接将保存的内容恢复并删除。
git branch -D dev(分支)用于未合并分支的强行删除。
git push origin master 将本地分支推送到远程仓库。
git clone [email protected]:username/xxx.git从远程仓库克隆分支。(如果是从另一台电脑克隆,那么只能在本地看到master分支)
git checkout -b dev origin/dev 创建本地dev。(关联远程仓库dev分支)
git remote -v 查看远程仓库信息。
git push origin branch-name 从本地推送分支。
git pull如果无法推送,从远程库获取最新提交。
git checkout -b branch-name origin/branch-name 在本地创建和远程分支关联的分支(名字最好相同)
git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联。

你可能感兴趣的:(git 版本库学习)