git介绍
版本控制工具,管理项目起来相当方便,可回滚版本。
基本配置
-
安装好后,点击开始菜单“Git”->“Git Bash”,蹦出窗口,就是安装成功
-
绑定用户名、邮箱地址
git config --global user.name "Your Name"(用户名) git config --global user.email "email@example.com"(邮箱地址)
-
git记住账号密码(会方便很多)
git config --global credential.helper store
-
git指令显示颜色,更加有辨识度(看个人情况使用)
git config --global color.ui true
- 配置
gitignore
文件,参考官方https://github.com/github/gitignore
简单使用
-
初始化仓库,就是创建了一个版本库
git init
-
将文件提交到版本库,经历以下步骤
-
文件添加到版本库(暂时放在暂存区中):
git add test.js # git add 后面跟的是想添加的文件 #可以简化指令,将所有有更新的文件添加到版本库中 git add . #或者 git add -A
-
文件真正提交到版本库中(暂存区的修改全部提交):
git commit -m "xxx" #xxx为文件说明
-
-
从版本库中删除文件
git rm <file> #<file>为文件名 #接下来还要将提交到版本库 git commit -m "删除file文件"
-
如果你修改了某个文件的内容,可使用以下指令查看(对比版本库里的文件)
git diff
-
查看文件在工作区和暂存区的状态
git status
-
将修改的文件内容暂时缓存,不提交到版本库
git stash # 把当前还未提交的内容缓存起来,等以后可继续工作 git stash list # 查看stash的内容 git stash pop # 恢复内容同时删除 stash 的内容
-
其他可能会涉及的命令
git checkout -- file # 撤销工作区的修改,可使用此命令,让版本库的版本替代工作区的版本(误删除使用) git reset HEAD <file> # 暂存区对应文件撤销并回到工作区 git reset # 暂存区全部内容撤销,并回到工作区
工作区可以理解为我们在编写代码的地方
远程仓库
-
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
在主目录里找到**.ssh目录把id_rsa.pub(公钥)复制,粘贴到GitHub的
Account settings
的SSH Keys
的Key文本框** -
关联远程仓库
git remote add origin git@github.com:(自己的GitHub账户名)/(仓库地址)
-
推送到远程库(初始时)
git push -u origin master
之后可以简化指令
git push origin master
-
查看远程库
git remote -v
-
克隆远程库,拉取到本地
git clone *** # ***为仓库地址
-
拉取远程仓库最新版本(后面没带参数,默认拉取主分支)
git pull # 自动合并 git fetch # 不自动合并,需手动merge
区别在于:本地版本库里的head/分支名的commitID有没有更新
版本回退
重要
-
查看提交记录
git log
-
回退版本,参数说明
git reset --mixed # 默认,将文件回退到工作区,丢弃暂存区的文件 --soft # 将文件回退到暂存区 --hard # 将文件回退到修改前,丢弃工作区和暂存区的文件 git reset --hard HEAD~* # 返回上*个版本 git reset --hard *** # ***为commitID(随便取前几个书都可以)
如果不小心回退错了,可以返回之前的版本
git relog # 查看每一次操作指令 git reset --hard *** # ***为操作指令的commitID
分支管理
多人合作开发的基础取决于分支管理
-
创建分支,并切换到此分支
git branch dev # 创建dev分支 git checkout dev # 切换到dev分支 # 可使用一气呵成的指令 git checkout-b dev
切换到已有分支,也可以使用**
git switch dev
** -
查看当前所有分支
git branch
-
删除分支
git branch -d dev #dev为分支名
-
切换回mster分支,并合并
git checkout master git merge dev
dev分支上的内容需先提交到版本库,否则就没什么意义
-
查看分支合并图
git log --graph
-
分支重命名
git branch -m old new # old为分支旧名, new为分支新名
-
有时可能需要将特定分支提交到当前分支,可使用
git cherry-pick **** # "\****"为特定分支的commit id的前几位
合并分支
讲一下合并分支的注意点吧,通常会涉及git merge
和git rebase
两种指令
-
git merge
-
解决冲突,合并分支后会形成一个新的commitID,保持在最后边
本质上就是你提交了一个commit
-
-
git rebase
-
解决冲突,合并分支后不会形成新的commitID
手动改冲突内容,添加到暂存区后,使用了**
git rebase --continue
**命令,使其继续执行合并工作 -
commit记录很优雅地串成一条直线(很不利于查看有无合并过)
-
补充些指令参数说明
git rebase --continue # 继续执行rebase操作 git rebase --abort # 终止rebase操作,回到rebase开始前
-
两种合并命令效果不同,应用场景不同,但也不是固定的,实际想用哪个还是取决于团队。有的团队就想用rebase
命令,让记录更直观、清晰,也不想有多余的记录(指生成新commitID)。
这里顺便说一下rebase
的其他用处,有时我们想让几个commit合并成一个commit(为了开发规范),再合并到主分支。
git log # 先查看你想合并的commit
git rebase -i HEAD~* # 合并前*个commit
#之后进入编辑页面,将前(*-1)个commit的pick修改为s(squash),保存退出即可。
ps:使用git rebase
命令后,推送到远程库需要强推,使用git push -f
标签管理
我不常用,但还是得记录一下
git tag<name> # 打标签
git tag -a <name> -m<message> # 创建有说明的标签
git tag # 查标签
git show <tagname> # 查看标签信息
git tag -d <tagname> # 删除标签
git push origin --tags/git push origin <tagname> # 推送标签到远程
# 删除远程标签
git tag -d <tagname> # 删除本地
git push origin :refs/tags/<tagname> # 删除远程
git多人协作总结
仓库创建者需邀请参与人员进仓库(让其有权限推送到远程仓库上),之后参与人员通过以下步骤进行操作:
git clone git@github.com:*** # 克隆远程库,***为仓库名
git checkout -b dev # 创建本地dev分支, dev为分支名
#在自己分支上开发完毕后,三部曲(add、commit、push),第一次推送可能不成功(分支还没关联到远程),按照面板的提示输入指令即可
解决冲突(这里使用merge
)
git pull # 从远程库拉取最新版,在主分支上执行
git merge dev # 合并分支,手动解决冲突,修改后记得提交到版本库
git push # 推送