Git简介
git是分布式版本控制系统。
集中式版本控制就是所有版本集中在一个仓库中心A,其他人B,C从A中拿出版本但只能拿到一个版本。
分布式版本控制就是版本v1 v2 v3不仅在A,在B,C都有。就算A挂了也没事,B,C有,可以把版本推到A。如果A写完了一个版本v4,它先保存在自己本地,然后再同步推到A。
为什么要做版本控制?
在开发过程中,随公司业务量增大,功能越来越多。
防止线上代码出问题,可以做回滚。
版本控制——git管理文件夹
①进入要管理的文件夹
②初始化git init,git status检测当前文件夹下面的文件状态
③管文件和文件夹git add xxxx,(再执行git status,绿色的就是管理了的,红色的未管理的)【git add . 将当前所有未管理的都管理起来】
④个人信息配置:用户名和邮箱:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
⑤生成版本 git commit -m 'v1' 生成v1版本
当有人对管理的文件做修改后,git可以检测到,git status会变红且显示Modified。
需要再生成一个版本:git add . 。git commit -m 'v2'
想要查看这两个版本的记录可以用:git log
git三大区域
工作区:就是写代码时正在操作的文件,有两个状态:已管理和新增/修改(红色)。只要执行git init后,git就会自动检测。
想把工作区中新增或修改的文件提交到暂存区,用add命令。
想进行回滚git checkout -- 文件名,就变回已管理状态。
暂存区:像个缓存区域,临时保存你的改动。提交到暂存区后颜色会变绿色。如果不要它可以进行回滚,或者想生成一个版本可以再往后提交。
把暂存区文件生成版本提交到版本库,用commit命令。
想回滚到未暂存的状态:git reset HEAD 文件名
版本库(head,指向最后一次提交的结果):
如果最新版本v3功能有问题,想回滚到上一个版本v2可以用git reset --hard 版本号(在git log中)
如果又没问题,想回滚到之前写的最新版本v3,可以用git reflog,然后git rest --hard 版本号
分支
第一个版本C1是最初版本,在第二个版本C2里只保留新增的发生变化的代码。C2没修改的部分通过指针形式指向C1。
可以建2个分支,C3指向C2,C4也指向C2。就可以把功能分开完成,最后再合并到C5就行。【当需要紧急修复线上Bug,就可以创建一个新的分支进行修复,修复完后再合并到主分支中】
git branch:可以查看目前分支有哪些
git branch xxx:创建分支xxx
git checkout xxx:切换到xxx分支
git merge xxx:(先进入到某分支)把xxx分支合并过来
git branch -d xxx:把xxx分支删去
当分支合并出现冲突,就需要你修改这些文件来手动合并这些冲突(conflicts)。改完之后,你需要执行如下命令以将它们标记为合并成功:git add <filename>
github
1.new respository创建一个新仓库
2.创建完后https/ssh 是代码要推送的地址,也就是远程仓库的地址
如果是个空文件夹:
git init
git add README.md
git commit -m 'xxx'
git remote add origin https://github.com/xxx/xxxx.xxx:将远程仓库地址取个别名orgin
git push origin master:把本地分支推送到远程仓库
如果不是空文件夹:
git remote add origin https://github.com/xxx/xxxx.xxx:将远程仓库地址取个别名orgin
git push origin master:把本地分支推送到远程仓库
如果想把代码拉下来:git clone https://xxxxxxxx【克隆时候,把所有分支也都克隆下来,且内部已经实现git remote add origin 远程仓库】
想要把最新的代码拉下来:git pull origin dev【就是本地有代码,但不是最新的时候用它】
git pull orgin dev相当于git fetch origin dev 和git merge origin/dev
如果想邀请别人一起参与项目:
settings-> Collaborators -> 被邀请的人会受到邮件
rebase
能帮你把多个提交记录整合成一个提交记录。
git rebase -i 版本号【希望最新记录到版本号的这几个记录合并成一个】
git rebase -i HEAD~3【从当前开始找最近的3条记录进行合并】
注意:要合并的是那些没有提交到远程仓库的,如果已经提交了的最好不要合并。
鄙人实习中遇到的指令
1.git stash
因为我电脑是windows环境,所以有一个配置必须修改一下,所以一直有一个modify,想跳过它操作后面的就可以执行git stash,相当于把修改存在一个栈里,执行完后,就相当于清空你那些提示,然后就可以git pull --xxx或者git checkout xxx。执行完这些操作后,再git stash pop。相当于把你的修改再拿回来。
git stash list可以在这里查看你git stash的修改
git stash clear每次用完以后,记得清空这个stash要不然每次pop进来的有以前的就会很混乱
2.git log查看记录,然后找到对应记录的版本号
git show 版本号。就可以查看对应的diff,找到修改的目录
(在这之前先git add .)
3.提交:git commit -m "feat(对应分支): 描述"
如果不小心commit信息写错了,可以用git commit --amend来进行修改
4.git rebase xxx -i :( xxx是你要合到的分支 )把你的多个commit合并成一个commit。
然后就会出现你提交的一堆commit,在你要保留的commit最左边用vim改成p,其他不保留的改成f,这样就会将其他f的合并到p上。就成一个commit了
想要终止rebase:git rebase --abort
合成一个以后,进行git push 操作,推到远端
5.在commit之前或者等等情况,需要拉取最新的代码:git pull --rebase【相当于git fetch+git rebase xxx】
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
6.在合了一个分支1以后,想再合并一个分支2,需要更新你合并到的那个分支develop,然后切换到分支2.
git checkout develop
git pull --rebase
git checkout 分支2
然后
git rebase develop
就会有冲突,自己解决完冲突以后
git rebase --continue
git push origin xxx -f
然后再合并