GIT 教程
GIT 教程,来源: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
1.windows下载 https://git-for-windows.github.io 。 或国内镜像 。按默认选项安装即可。
2.安装结束后,开始菜单找到“Git”->“Git Bash”
并输入(-- 后无空格):
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
3.切换到自己想要的目录,确保目录中不要有中文。。创建一个空目录。
$ mkdir learngit $ cd learngit $ pwd #pwd命令用于显示当前目录 /Users/michael/learngit
4. 执行 git init 命令。把目录变成 GIT可以管理的仓库。
ps: 同时,会有创建一个 .git 的隐藏文件。使用 ls -ah 命令可看见。
注: 建议使用标准的UTF-8编码 。使用Notepad++ 时,默认编码设置为UTF-8 without BOM
5. 添加文件到Git仓库,分两步:
第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;
$ git add readme.txt # git add 是将修改内容或者新文件添加到本地缓存区
第二步,使用命令git commit,完成。 -m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit -m "wrote a readme file" # git commit 将本地缓冲区的内容提交到本地仓库
6.查看当前工作区的状态 git status 。可以知道有哪些文件被修改过
7.查看修改的内容 git diff
8. 显示从最近到最远的提交日志 git log 。每条记录对应显示commit时,同步的mess
HEAD
表示当前版本,即最新提交
HEAD^ : 上一个版本
HEAD^^ :上上一个版本
HEAD~100 :往上100个版本
回退到上一个版本: git reset --hard HEAD^
跳转到指定版本,需知道版本ID: git reset --hard 版本号 (版本号可以不写全,也不能太短。)
9. 查看命令历史 : git reflog 。 ps: 通过操作历史, 可以确定要回到未来的哪个版本
10.工作区: 在电脑里能看到的目录
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
GIT版本库中包含 称为stage(或者叫index)的暂存区。还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
11. 把文件往Git版本库里添加的时候,是分两步执行的:
(1)用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
(2)用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,git commit就是往master分支上提交更改。
>>>需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改
12.GIT管理的是修改。 commit的内容 只会是提交了修改,即 add 之后的内容。
git diff HEAD -- readme.txt # 可以查看工作区和版本库里面最新版本的区别
13. 撤销修改
git checkout -- file :把file
文件在工作区的修改全部撤销,即没有add过的修改 (git checkout -- file
命令中的--
很重要,没有- -
,就变成了“切换到另一个分支”的命令)
(1)file 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
(2)file 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
>>>> 让这个文件回到最近一次git commit
或git add
时的状态。
git reset HEAD file : 可以把暂存区的修改撤销掉(unstage),重新放回工作区 。即add 但是没有commit 的修改 时,可执行此命令。
13. 删除文件
rm 删除
git rm file :从版本库中删除该文件 。后面还需要 git commit
git checkout -- test.txt : 把误删的文件恢复到最新版本。
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
14. 关联本地仓库和 GitHub :
(1)在本地的 learngit仓库下,运行命令
git remote add origin git@github.com:GITHub账户名/learngit.git 添加后,远程库的名字就是origin (Git默认的叫法)
(2) 第一次将本地库内容推送到远程
git push -u origin master
第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来
git push origin master
后续把本地master分支最新修改推送至GitHub
15.SSH警告
第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告: 即判断 GitHub的RSA Key的指纹信息是否与SSH连接给出的一致 。yes 即可。
16.从远程库克隆
git clone git@github.com:GITHub账户名/gitskills.git 用命令克隆一个远程库。 (gitskills 是GitHub上创建的仓库名)
17. 分支管理
git branch 查看当前分支 。 git branch命令会列出所有分支,当前分支前面会标一个*号。
git branch dev 创建dev分支
git checkout dev 切换到dev分支
或 git checkout -b dev 表示创建并切换
git merge dev 把dev分支的工作成果合并到master分支上 (git merge命令用于合并指定分支到当前分支。)
git branch -d dev 删除dev分支
18. 解决冲突:
git status 可以告诉冲突的文集。 然后先手动解决冲突,再提交
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
git log --graph --pretty=oneline --abbrev-commit 用带参数的git log也可以看到分支的合并情况
git log --graph 可以看到分支合并图
19. 分支管理策略
策略一: Fast forward模式 (该模式下,删除分支后,会丢掉分支信息)
策略二:强制禁用Fast forward模式,即用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
it merge --no-ff -m "merge with no-ff" dev # --no-ff参数,表示禁用Fast forward,
#本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
20.
git remote 查看远程库的信息
git remote -v 显示更详细的信息,可抓取和推送的origin地址。如果没有推送权限,则看不到push地址。
21. bug分支
通过一个新的临时分支来修复bug,修复后,合并分支,然后将临时分支删除。
对于修复紧急bug分支时,可以先冻结当前工作现场 git stash 。
bug修复后,可通过 git stash list 查看当前工作现场 git stash list
恢复工作现场 git stash apply
删除stash内容 git stash drop
或在恢复工作现场的同时,就把stash内容删除 git stash pop
22.Feature分支
需求分支,每添加一个新功能,新建一个 feature分支。
git checkout -b feature-vulcan #新建feature分支
git branch -d feature-vulcan 合并前删除分支,此时会有提示删除后则丢失修改
git branch -D feature-vulcan 强行删除。则可删除成功。、
23.推送分支
git push origin master 把分支上所有本地提交,推送到远程库对应的远程分支上
git push origin dev 推送其他分支到远程库
24.判断是否需要推送:
(1)master分支是主分支,因此要时刻与远程同步;
(2)dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
(3)bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
(4)feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
25.
标签管理
标签tag是让人容易记住的有意义的名字。是指向某个commit的指针。如V1.2