初始化 git init 当前文件夹初始化 代码提交 git add file/. 自动检测工做区修改的内容提交到暂存区 git status 查看当前文件夹工做区的状态:是否有内容修改 git commit -m '描述' 暂存区内容提交到仓库 代码回滚 git checkout file 暂存区回滚到工做区 git reset --hard '版本号' 回滚到指定版本的工做区 git reset --soft '版本号' 将指定版本回滚到暂存区 git reset --mix '版本号' 将指定版本回滚到修改过的内容 查看版本日志 git log 查看日志信息: 命令(版本号) 做者 时间 版本描述 git log --pretty=oneline 日志信息:版本号 版本描述 git reflog 日志信息:版本号缩写(7位) HEAD(x) 命令 操做记录 注:git log: 若回滚到以前的版本,后面的版本将不会显示 git reflog会显示全部版本信息 删除文件 rm file git add/rm file git commit -m 'delete' 撤销删除操做 rm file git checkout --file 回滚至修改前的状态 rm file git add file git reset HEAD file git checkout --file 回滚至提交到暂存区前的状态 rm file git reset --hrad '版本号' 回滚至指定版本号
1. 初始化前端
git init 初始化,会生成一个.git文件, 全部版本信息都放在此文件 查看当前文件夹的状态: git status 编辑代码 ...
2. 提交代码到暂存区 工做区 -> 暂存区vue
git add src 把代码放入git 暂存区 # git add . 提交全部修改的文件 git status 此时刚才add文件变成了绿色
3. 建立提交记录(版本) 暂存区 -> 仓库python
git commit -m '版本描述' 把代码从暂存区放在git仓库 stage->master git config --user.email 1271570224@qq.com git config --user.name zhangyafei git commit -m 'vue第一个版本' git status 此时已经为空,表示提交的全部文件已经放在了git仓库
4. 修改代码:好比我修改了README.mdgit
git status 查看当前的代码状态 发现刚刚修改的文件变为了红色
5. 提交修改记录github
git add . git commit -m '修改README描述
6.git log 查看git日志
输出:命令(版本号),做者,时间,版本描述app
fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master) $ git log commit 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c Author: 张亚飞 <1271570224@qq.com> Date: Wed Jan 23 10:47:56 2019 +0800 完善README描述 commit 7866d35d2af1691705047127a620ab293f29f8f8 Author: 张亚飞 <1271570224@qq.com> Date: Wed Jan 23 10:39:25 2019 +0800 vue第一个版本
7. git log --pretty=oneline
输出:版本号,版本描述ssh
fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master) $ git log --pretty=oneline 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c 完善README描述 7866d35d2af1691705047127a620ab293f29f8f8 vue第一个版本
8. git reflog 查看全部版本操做
输出:版本号 修改顺序(最近修改的在前)gitlab
fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master) $ git reflog 1cf1f43 HEAD@{0}: reset: moving to 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c 7866d35 HEAD@{1}: reset: moving to 7866d35d2af1691705047127a620ab293f29f8f8 1cf1f43 HEAD@{2}: commit: 完善README描述 7866d35 HEAD@{3}: commit (initial): vue第一个版本
9. 回滚操做学习
$ git reset --hard 7866d35d2af1691705047127a620ab293f29f8f8 HEAD is now at 7866d35 vue第一个版本 $ git reset --hard 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c HEAD is now at 1cf1f43 完善README描述
10. 修改代码fetch
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: src/App.vue no changes added to commit (use "git add" and/or "git commit -a")
11. 撤销修改
修改过的内容 -> 上一次提交的状态
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: src/App.vue no changes added to commit (use "git add" and/or "git commit -a") fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master) $ git checkout src/App.vue
12. 暂存区 -> 修改过的内容
git reset HEAD file
13. 提交的版本 -> 暂存区
git reset --soft 版本号
14. 提交的版本 -> 修改过的内容
git reset --mix 版本号
15. 提交的版本 -> 原内容 即回滚到指定版本号
git reset hard 版本号
16. 删除一个文件并提交
rm file 本地删除 git add/rm file 提交到暂存区 git coommit -m 'delete' 从仓库删除
17. 删除一个文件 -> 撤销删除操做回到删除前的状态
rm file git checkout -- file 撤销修改
18. 删除一个文件并提交至暂存区 -> 撤销删除操做并回滚至删除前的状态
rm file git add/rm file 提交到暂存区 git reset HEAD file ,从暂存区回滚到工做区 gir checkout -- file ,把工做区里操做删除回滚
情景再现:假设公司产品已经上线,要继续研发功能,你正在研发一个新功能,此时线上产品出bug了,须要你立刻解决一下,或者临时新功能到来,这时你会怎么办?
git stash:用于将工做区发生变化的全部文件获取临时存储在“某个地方”,将工做区还原当前版本未操做前的状态;stash还能够将临时存储在“某个地方”的文件再次拿回到工做区。
git stash 将新增长的功能放到一个神奇的地方,代码回到修改以前的状态 开始解决bug ... 解决完问题并提交代码,产品上线 git stash pop 将新增长的功能和现有代码合并 注:此时会出现两种状况 1.顺利合并 2.合并冲突,须要手动解决 冲突 $ git stash pop Auto-merging README.md CONFLICT (content): Merge conflict in README.md 代码 <<<<<<< Updated upstream ======= > bug - 新功能 >>>>>>> Stashed changes
stash相关经常使用命令:
git stash做用,帮助咱们暂时存储已经开发一些功能的代码,继续作其余事情,作完以后,再回来继续开发
git branch dev 建立一个新的dev分支 git checkout dev 你跳转到dev分支开发新功能 git add . git commit -m 'xxxx' 公司产品出现Bug git branch master 跳转到master分支 git branch dev2 建立一个dev2分支解决bug git checkout dev2 找另外一我的跳转到dev2分支解决bug ... 解决完bug git add . git commit -m '修改bug‘ 提交代码 git checkout master 跳转到master分支 git merge dev2 将master与dev2分支进行合并 git branch -d dev2 删除dev2分支 这个过程当中你能够继续在dev分支上进行开发,开发完成以后 git add . git commit -m ’新功能完成' git branch master git merge dev master分支与dev分支进行合并,发生冲突手动解决
情景再现:本身在家里的电脑写完代码要带到公司继续开发,u盘?有风险
前提:在github上建立一个项目,克隆远程地址
git remote add origin https://github.com/zhangyafeii/rest_vue.git # git pull --rebase origin master 代码合并 可能须要 git push -u origin master 代码推送到远程master git checkout dev 切换到dev分支 git push -u origin dev 将代码推送到远程dev分支
git clone https://github.com/zhangyafeii/rest_vue.git 注:默认只下载master分支 git pull origin dev 从远程下载dev分支,直接下载到本地工做区。等于以上两步 - git fetch origin dev 从远程下载到本地版本库 - git merge origin/dev 将本地版本库与工做区合并 git rebase origin/dev 保持提交记录的整洁 # git pull origin master # git fetch origin master # git merge origin/master
回到家: git pull origin dev 从远程下载dev分支 修改代码 git add . git commit -m '描述' git push origin dev 将本地代码上传到远程 去到公司 git pull origin dev 修改代码 git add . git commit -m '描述' git push origin dev
情景模拟
开发功能初期 员工A回到家 git clone https://github.com/zhangyafeii/rest_vue.git git branch A git checkout A 编写代码 git add . git commit -m '描述' git push origin A 这时远程将会自动建立A这个分支 员工B回到家 git clone https://github.com/zhangyafeii/rest_vue.git git branch B git checkout B 编写代码 git add . git commit -m '描述' git push origin B 这时远程将会自动建立B这个分支 功能完成合并分支 员工A git clone https://github.com/zhangyafeii/rest_vue.git git branch A git checkout A 编写代码 git add . git commit -m 'A功能开发完成' git push origin A # 第一个开发完成,首先合并比较轻松 git checkout dev git merge A git push origin dev 员工B git clone https://github.com/zhangyafeii/rest_vue.git git branch B git checkout B 编写代码 git add . git commit -m '描述' git push origin B # 注意: git checkout dev git merge B git push origin dev # 报错 $ git push origin dev To https://github.com/WuPeiqi/dbhot.git ! [rejected] dev -> dev (fetch first) error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. # 第二个之后开发完成,得先拉下dev分支,而后在最新dev分支上合并,不然会报错 # 正确: git pull origin dev git checkout dev git merge B git push origin dev
4. 作代码review
- 建立review分支:
- 组长
- 带你的人
问题: 若是你要在github上给别人代码添加功能?
1. 不用反复输入用户名密码登陆
Https: https://用户名:密码@github.com/zhangyafei/rest_vue.git git remote add origin https://用户名:密码@github.com/zhangyafei/rest_vue.git SSH: git@github.com:WuPeiqi/dbhot.git 前提:获取ssh的key $ ssh-keygen.exe cd /c/Users/fei/.ssh fei@home-fei MINGW64 ~/.ssh $ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC7Aj9QiwzWu1tOheUSEFP2XQOZ57V8mjKIKufV7qVnWx/IEg7W4/8NzDAP51drpraJcJ+eYJvltrqQzUAwdkBKmtv+VaameRseoHLvHio3BLtiw35q8LuDH4L2f0DvCXpphISF9XGkr4rEgswbPFAG8tZwEjw6sm2uOyeCyfeZHDrZKbx/Xy/4Yz6wuPjWVUj65TdsmNtvu99xjTW84pKklDUN+EIErtWyUQqljwWiwqKfEqSFyEPfLJ+OTbGxldbt14eI2nfJvvhIw42TKkpeR7JTC4EPZpHszlj54XiGpavyLBwxPtkGHKR7W9vgC7ctq0qq5nXZud8FUJ7TdD/ fei@home-fei
2. gitignore文件
建立github项目的时候选择gitignore python
3. 版本
git tag -a v1.0 -m '版本介绍' 本地建立Tag git show v1.0 查看 git tags -n 查看本地Tag git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配 git tag -d v1.0 删除Tag git push origin :refs/tags/v0.2 更新远程tag git checkout v.10 切换tag git fetch origin tag V1.2 git push origin --tags git pull origin --tagsgit clone -b v1.0 https://github.com/zhangyafeii/rest_vue.git