xigua 2019-06-28
Git 是一个免费的开源分布式版本控制系统,它的设计目的是为了速度和效率的处理从小型到大型的项目;Git 可以帮我们管理我们的代码,记录历史,只要代码提交到 Git 上就永久不会丢失,可以随时 “穿越”(回到之前的某一个版本);可以多端共享,团队协作中,多个人操作了同一个文件时,可以实现自动合并(模块化,组件化)、标记冲突,拥有强大的分支管理系统。
SVN:集中式,需要一台中央服务器,所有代码的拉取和提交都是在中央服务器,一旦中央服务器或者网络出现故障,则不能拉取和提交代码,需要不断去备份中央服务器,防止代码丢失。
Git:分布式,有一个中央服务器的同时,每个开发者本地都有自己的本地仓库,拥有完整的版本库,不用担心代码丢失,Git 存储的是代码变化的快照,更新代码的速度要比 SVN 更快。
Windows
Mac
可以安装 Homebrew,是 wmac 的包管理器,https://brew.sh/,下面是两款界面美化插件:
pwd
mkdir 文件夹名
进入盘符:
cd d:
进入文件夹:
cd 文件夹名
回上一级目录:
cd ..
进入某一个路径:
cd 路径
想要进入某一个不知道路径的文件夹中,可以直接拖拽该文件到命令窗口,会自动识别路径。
lsls -al
下面命令加了 -al
参数可以查看隐藏文件。
touch 文件名
mv 文件/文件夹 路径
将文件或者文件夹移动到所输入的路径下。
cat 文件名
rm -rf 文件夹名rm 文件名
-rf
为递归删除,后面加上 *
为参数会递归删除整个文件夹的内容,rm -rf *
(慎用)。
clear
直接在命令行中查看:
history
将当前 Git 的命令历史写入文件中:
history > 文件名
vi 文件名
进入编辑模式:
i
进入命令模式:
Esc
保存并退出:
:wq
强制退出:
:q!
向文件输入内容:
echo 内容 > 文件名
向文件追加内容:
echo 内容 >> 文件名
当使用 echo
编辑了一个不存在的文件时,会创建一个新文件并将内容编辑到文件中,而 touch
创建的是空文件。
Git 在管理文件时,所有文件都具有三种状态,已修改、已暂存、已提交。
Git 在本地仓库中由三部分组成,工作区、暂存区、版本库。
Git 管理的文件夹下都有一个名为 .git
的隐藏文件夹。
对应关系如下:
.git
文件夹下的 index
文件中)不配置用户无法提交代码。
查看配置信息:
git config --list
配置用户名:
git config --global user.name "你的名字"
配置邮箱:
git config --global user.email "你的邮箱"
在要初始化的文件夹下执行下面命令,告诉 Git 哪个文件夹被 Git 所管理,一个项目初始化一次,不能嵌套。
git init
git status
文件为红色,代表有修改,文件名为绿色,代表已经加入暂存区。
git add 文件名git add .
git add -A
.
和 -A
两个参数均为全部提交到暂存区,.
只监控修改、添加文件的变化,-A
监控修改、添加、删除文件。
git rm --cached 文件名git rm --cached . -r
第一个命令是删除某一个文件的暂存区,当参数为 .
的时候删除全部暂存区,所以需要加上代表递归删除的参数 -r
。
从暂存区提交到版本库:
git commit -m "版本信息"
从工作区直接提交到版本库(需要之前添加过暂存区):
git commit -a -m "版本信息"
git log
工作区和暂存区比较:
git diff
工作区和版本库比较:
git diff 分支名
暂存区和版本库比较:
git diff --cached
git checkout 文件名git checkout .
撤销操作是将暂存区覆盖到工作区,会放弃掉当前工作区修改的内容,. 参数是将整个暂存区覆盖当前工作区,一旦撤销就回不到之前的工作区了。
当不小心将当前工作区错误的代码提交到暂存区,可以使用下面命令将暂存区回滚到上一个暂存区,只可回滚一次。
git reset HEAD 文件名
查看所有的版本号:
git reflog
按版本号回退版本:
git reset --hard 版本号
回退到上一个版本:
git reset --hard HEAD^
回退某一个版本的文件到工作区:
git checkout 版本号 文件名
回退版本会将当前版本库选中的版本重新覆盖暂存区和工作区。
查看分支:
git branch
Git 刚刚初始化管理的的文件夹必须有一次提交到版本库(root-commit:根提交)以后才会有主分支 master,否则即使创建了新分支也无法切换回 master。
创建分支:
git branch 分支名
切换分支:
git checkout 分支名
创建并切换分支:
git checkout -b 分支名
删除分支(需切换出要删除的分支):
git branch -D 分支名
新创建的分支和主分支 master 还是同一个区域,新建的文件只有提交到新分支的版本库才真正脱离关系。
分支工作区有更改不能直接切换其他分支,可以提交更改或者暂存更改,若暂存更改(使用暂存区覆盖掉工作区),等待重新切回分支时,还原暂存。
此处所说的暂存不是之前的将代码提交到暂存区,因为当前分支工作区的代码会变成要切换分支工作区的代码,而导致当前分支工作区的更改丢失,此处的暂存类似于将修改寄存,重新切回该分支时再还原。
暂存更改:
git stash
还原暂存的内容:
git stash pop
合并分支:
将指定分支合并到当前所在的分支,所以,在分支开发完毕后,合并分支需要先切换回 master 主分支。
git merge 指定的分支名
查看分支合并的图谱:
git log --graphgit log --graph --oneline
红色线代表主分支,绿色线代表新创建的分支,分支上的 *
代表提交到版本库的节点。--oneline
参数表示提交信息显示为一行。
当创建分支后,分支和 master 主分支分别提交代码到版本库,此时切换回 master 主分支,合并分支会出现冲突,需手动处理后,重新提交到暂存区并提交到版本库。
// 代码冲突 <<<<<<< HEAD (当前更改) master 分支代码 ======= 开发分支的代码 >>>>>>> 开发的分支 (传入的更改)
远程仓库可以是 Github、Gitee(码云)、Coding 或者中央服务器等等。
以下是常用免费仓库的地址,可以在首页注册账号:
使用 WebStrom 编辑器编辑代码时,会自动在根目录生成 .idea
文件夹,使用 Mac 开发时根目录下的 .DS_Store
文件夹,以及在项目开发时会安装依赖存放在 node_modules
文件夹中,此类文件夹都是在把代码上传到远程仓库或中央服务器时不应该上传的,因此应该在上传之前过滤掉。
在根目录创建 .gitignore
文件用于记录上传时被忽略的文件夹,内容(可根据需要自行配置)如下:
文件:.gitignore
.idea .DS_Store node_modules
Git 上传时会自动忽略空文件夹,假设想要上传一个名为 public
的空文件夹,需要在文件夹内新建一个名为 .gitkeep
的文件(名字随意,最好有语义化),目的是使要提交的空文件夹不再为空。
git remote add origin 远程仓库地址
git remote -v
git remote rm 地址别名
地址别名指的是上面的 origin
,也可以是其他名称,必须对应要删除关联的地址别名。
git push origin mastergit push -u origin master
如果加上了 -u
参数,以后再次提交时可省略地址别名和分支名称,直接执行下面命令进行提交。
git push
在提交代码时,如果直接提交到远程仓库,会将当前代码覆盖到远程仓库,如果别人之前也向远程仓库提交了代码,会在远程仓库中造成冲突,所以一般在提交代码之前先拉取远程仓库的代码与本地代码进行合并,并产生一个新的历史记录,若出现冲突,手动处理冲突后再统一提交到远程仓库。
拉取但不合并代码(与 merge 配合,不常用):
git fetch origin master
拉取并合并代码(常用):
git pull origin master
涉及到远程仓库网站上的操作均以 Github 为例,其他仓库大同小异:
gh-pages
的分支;Settings
切换到 github-pages
;git checkout -b gh-pages
touch index.html
git add .
git commit -m "提交信息"
git push origin gh-pages
git clone 项目地址 项目别名
上面命令项目别名是可选的,相当于给项目根文件夹重命名。
Issue
选项;Fork
;Fork
是在当前项目下克隆了一份,如果代码更新,不会随之更新;clone
命令克隆自己的地址将项目拉到本地,进行操作;origin
地址,修改后可以将代码提交到自己的仓库上;Fork
关系才能修改别人代码后点击 New pull request
发送提交请求;Create pull request
按钮,填写提交标题,和提交详情,确认提交;Pull request
菜单中查看提交并处理;Close pull request
关闭,点击 Merge pull request
同意提交并合并。如果是一个团队的其他人需要操作同一个项目,上面的过程显得很繁琐,项目所有者可以在 Settings
的 Collaborators
选项中通过添加别人的账号或用户名向项目中添加贡献者,被添加的人拥有最大权限。
在当前的前端开发编辑器中,如 VSCode 和 WebStorm 等都集成了 Git,可以直接点击按钮操作,不必使用命令行,这种操作 Git 的界面称作 GUI 界面,个人建议还是尽量少的使用 GUI 界面,命令行是根本,还是多敲命令行,孰能生巧。
<br/>