最近更新时间:2017年7月4日22:46:08
随着开源思想的发展和进化,社会化编已经走进程序员的工作和生活中,因此,主导社会发展潮流的分布式版本管理工具git应用而生,同时,托管代码仓库的开源平台也同时产生,即GitHub和GitLab。GItHub用于社会化项目的代码托管平台,代码托管服务器面向全球网络开放;GItLub用于公司内部项目的代码托管平台,代码托管服务器仅面向公司内部网络,供开发人员下载和提交代码。
因此,简单而言,git是一个分布式代码版本管理工具(软件),是一个有 命令行窗口(Git Bash Here)和 可视化界面(Git GUI Here) 的软件,可以下载、复制、合并、管理代码和仓库,表现为分布式开发、集中式管理的原则。GitHub和GitLab是一个开源的代码仓库托管平台,用来存放项目的所有文件。
Git篇
1、git安装和使用
从 git 官网下载安装包,然后本地安装即可使用,打开cmd命令窗口,执行$ git --version 命令,出现git版本信息表示安装成功。(如果提示git不是内部命令,需要手动配置环境变量 path )
配置个人用户名和邮箱,如下:
$ git config --global user.name "wanshaobo"
$ git config --global user.email "wanshaobo@shaobo.com"
2、git操作原理和步骤
①通过git clone获取远程仓库数据;②本地改动代码;③git push将本地改动代码传回git。
这三个步骤涉及两个仓库,remote repository(在远程服务器上)和local repository(在本地工作区上)。 git拥有一个远程仓库,作为代码合并中心;每个本地仓库都是一个独立的仓库,通过商定后合并到远程中心仓库。 本地仓库与远程仓库通过pull和push来实现同步,除此以外git本地仓库的操作也因为存在着缓冲区index(也可称之为staged)。
3、git clone命令
首先,指定需要存放代码的具体路径,进入到该目录下执行,右键-Git Bash Here,出现git命令行工具,然后执行
$ git clone https://github.com/wanshaobo/example.git;克隆master分支的代码到本地,目录名与版本库同名
$ git clone https://github.com/wanshaobo/example.git mycode;克隆master分支的代码到本地,并命名为mycode
$ git clone -b apptest https://github.com/***;克隆仓库代码中的apptest分支到本地
4、git checkout命令
$ git checkout localbranchname;切换当前开发环境到localbranchname分支下
$ git checkout -b feature-discuss;分出一个功能性分支,并切换当前开发环境到feature-discuss分支下;相当于 $git branch feature-discuss + $git checkout feature-discuss;这两个命令的叠加,新建一个分支,然后切换到这个分支
$ git checkout --orphan branch_name;新建一个无历史记录的独立的新分支
$ git push origin develop;把本地develop分支修改后的代码提交到服务器的仓库中
$ git checkout -b originbranchname origin/originbranchname;创建远程分支originbranchname到本地,并切换当前环境到originbranchname分支下
$ git checkout -t origin/originbranchname;同上
$git checkout . //丢弃本地修改的所有文件或操作(新增、删除、修改)
$git checkout ./idea //取消本地./idea的修改
备注:.idea目录加入.gitignore无效的解决方案
无效的原因:对应的目录或者文件已经被git跟踪
解决方法:git rm -r --cached .idea
5、git branch命令
$ git branch;查看本地所有分支,*表示当前分支
$ git branch -r;查看远程所有分支,origin/HEAD -> origin/master,HEAD指针指向当前工作的分支
$ git branch -a;查看本地和远程所有分支,远程分支为红色字体
$ git branchlocalbranchname;在当前开发环境的分支上,创建本地分支localbranchname
$ git branch -m oldbranchname newbranchname;重命名本地分支oldbranchname为newbranchname
6、提交代码到远程仓库的标准程序和问题解决
第一步:$ git pull;//更新远程分支的代码到本地,pull成功,请直接看第三步;如果发现远程分支的 A文件 在你上次提交后发生改变,同时你本地的 A文件 你自己也在上次提交后发生了改动,此时,会发生代码冲突,pull失败,请看第二步;
第二步:$ git status;//查看本地代码状态,找到发生冲突的文件,在webstorm中查看后修改保存,ctrl+k打开文件管理器,revert文件;$ git diff '冲突的文件路径';//进行文件比较
第三步:$ git add .;确定将 所有改动的代码 提交到主仓库
第四步:$ git commit -m '修改内容备注';准备提交并备注修改信息
第五步:$ git pull;如果第一步发生冲突pull失败,需要执行该步骤,进入对话框输入 :wq 回车退出;
$ git status;查看 本地分支代码 改动的所有文件内容
第六步:$ git push;最终提交操作
7、.gitignore文件
存放路径和生成方法:.gitignore存放在仓库根目录;右键手动新建 或 命令窗口通过命令创建
.gitignore配置文件的作用是 设置不需要进行版本管理的文件/文件夹;
语法格式:“#”注释;“/”目录;“*”通配符;“[]”匹配单个字符的列表;“!”不忽略
/node_modules
.idea/
.idea无法忽略时,执行 git rm -r --cached .idea
8、删除分支(提示:不能删除当前分支,需要切换到其他分支上才能执行删除操作)
$ git push origin --delete originbranchname;删除远程分支originbranchname
$ git push origin :originbranchname;删除远程分支originbranchname
$ git checkout .;放弃本地分支的修改,当前分支的代码版本会恢复到上一次提交或更新的状态
$ git checkout src/page/theme/theme_detail.vue;放弃本地分支theme_detail.vue文件的修改,当前文件会恢复到上一次提交或更新的状态
$ git branch -D localbranchname;强制删除本地分支localbranchname
$ git branch -d localbranchname;删除本地分支localbranchname
9、查看历史提交记录的版本号
$ git log -a;查看历史提交记录详情(作者、日期、备注、完整版本号)
$ git log -a --oneline;查看单行历史提交记录版本号详情(备注、简略版本号)
10、分支各个历史版本之间的切换
$ git log;查看历史提交记录和版本号
$ git reset --hard 历史版本号;恢复代码到指定 历史版本号 的历史版本,历史版本最少4为
$ git reset --hard HEAD^;恢复到上一个版本
$ git reset --hard HEAD^^;恢复到上上一个版本
$ git reset --hard HEAD~10;恢复到倒数第十个版本
$ git log;再次查看历史提交记录和版本号,可以看到恢复到指定版本后的版本都不见了,注意:看不到历史记录,如何恢复到后面的版本?只要记住每次的commit id就能直接恢复到指定版本。$ git reflog;查看git记录的每一次执行的命令,可以查看到每一次commit 的 id。q退出
$ gti reser --hard d2djs;恢复到最新的版本
11、本地新建分支并和远程仓库建立联系
本地当前环境master分支,$ git checkout -b develop;创建新分支
$ git push origin develop;将本地分支推送到远程仓库,但没有upstream,没有与与远程仓库建立链接
$ git push --set-upstream origin develop;将本地新建分支与远程仓库建立链接,并提交到远程代码仓库中
12、git add命令
git add,把我们要提交的文件的信息添加到索引库中,当我们使用git commit时,git将依据索引库中的内容来进行文件的提交
git add . 将本地所有改动的文件添加到索引库中
git add src/ 只将src文件目录下的所有改动的文件添加到索引库中
git add src/index.js 只将src文件目录下的index.js文件添加到索引库中
13、拉别人远端分支到自己本地
git checkout -b hotfix_wsb origin/hotfix_wsb
名字必须相同
git checkout -b hotfix_wsb,表示从本地分支(加入当前的本地分支是abc)abc复制一个名称为hotfix_wsb的分支
15、修复线上bug操作流程,新建热修复补丁分支
git checkout dev 切换到本地dev分支
git pull 拉最新代码到本地
git checkout -b hotfix_wsb_*** 从dev分支复制并在本地新建分支hotfix_wsb_***并切换到该分支
npm install
修改代码...
git checkout dev
git pull
git merge hotfix_wsb_***
如果有冲突,解决冲突
git push
16、新增功能,新建功能性分支
创建以feature开头的分支,如feature_wsb_new
17、暂时保存更改状态
在开发过程中,本地代码发生改动,在不想提交的情况下,从远程分支更新本地代码 || 切换分支,都会提示必须提交更改后的代码;此时可以使用暂存方案,来暂时保存本地的改动,然后进行相应的操作后恢复:
git stash 暂存改动状态
git stash list 查看暂存列表
git stash pop 恢复暂存
git stash drop 删除最新的暂存
git stash clear 删除所有暂存
18、新建分支
在开发新功能时,需要新建分支,首先切换到项目的主分支上(master/dev),$git pull拉去最新代码,然后创建新分支,$git checkout -b feature_new
19、更改分支名称
git branch -m old_branch new_branch; # Rename branch locally
git push origin :old_branch; # Delete the old branch
git push --set-upstream origin new_branch; # Push the new branch, set local branch to track the new remote
20、本地 git branch -r 查看不到远端仓库的某个分支
A用户在本地信件的分支 feature_new_branch 并且提交到了代码仓库;
B用户 git branch -r 查看的远端仓库分支列表没有 feature_new_branch 分支;
B用户切换到本地 master 分支上,git pull 更新代码仓库信息,然后 git branch -r 就可以查看到 feature_new_branch 分支;
21、在本地已有的项目中新建文件,或者文件夹,不想被git追踪,或者不想被提交到远程,但想在本地保留的操作
git rm --cache abc.json;//这个命令也属于删除远程仓库指定文件或目录的用途
22、恢复被修改的文件
用webstrom查看某个文件修改前后的对比,右击该文件-GIt-Compare with the Same Repository Version
场景一:恢复本地修改的所有文件,$git checkout .,表示当前路径下所有被修改的文件
场景二:恢复某个文件,$git checkout -- src/js/abc.js
场景三:已经进行了$git add . 操作,项目中所有文件已经被添加到暂存队列中,需要使用,$git reset HEAD,取消暂存队列中所有内容
场景四:src/js/abc.js单个文件被$git add src/js/abc.js,需要使用,$git reset HEAD -- src/js/abc.js,取消暂存队列中单个文件
23、回退项目版本
$git log,回车查看下一条记录,q退出这个命令
$git reset --head [commit-hashcode]
23、取消追踪
取消对文件的追踪
git rm --cached src/js/out/abc.js 取消追踪不删除文件
git rm --f src/js/out/abc.js 取消追踪并且删除文件
git rm -f src/js/out/abc.js 取消追踪并且删除文件
取消对所有文件的追踪
git rm -r --cached . 取消追踪不删除文件
git rm -rf --cached . 取消追踪并且删除文件
git rm -r --f --cached . 取消追踪并且删除文件
取消对文件夹的追踪
git rm --cached -r src/js/out 取消追踪不删除文件
git rm -r --f src/js/out 取消追踪并且删除文件
git rm -rf src/js/out 取消追踪并且删除文件
0、$ git 命令中英文对照
GitHub篇
1、GitHub名词解释
Pull Request:开发者在本地对代码进行改动后,向源仓库提交请求合并的操作;
Repository,仓库,项目创建人在GitHub平台上创建的一个用来存放项目整体文件的一个空间。仓库分为两种:源仓库(origin)和开发者仓库(develop),源仓库只有管理员权限才能进行增删改,用来存放项目最终发布的源代码;开发者仓库是从源仓库复制出来的分支,用于每个开发者日常开发。
Branch,分支,源仓库和开发者仓库的别称,git的常见分支模型为,分支分为两类五种:永久性分支(master branch(主分支),develop branch(开发分支))和临时性分支(feature branch(功能分支),release branch(预发布分支),hotfix branch(bug修复分支));
Fork,从 github源仓库 复制源代码到自己的 GitHub仓库 中
Git可视化工具SourceTree || GIT GUI