1.git安装和配置
git config -- global user.name "your name"
git config -- global user.email "your email"2.创建仓储
mkdir name 创建文件夹
pwd 显示当前目录
git init / git init -y 初始化管理仓储(多了.git文件夹)3.基本命令
git add filename / .(全部) 提交到在暂存区
git commit -m "版本说明" 提交到本地版本仓库4.版本控制
git log /git log --pretty=oneline 查看历史版本(单行简洁形式)
git reflog 查看历史命令
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~100 回退到往上100个版本
git reset --hard version(前几位即可) 回退到指定版本(version指提交到库存时自动生成的那一串)5.工作区域和暂存区
cat filename 读取文件的内容
git status 查看当前状态,随时掌控版本状态
git diff HEAD -- filename 查看指定文件当前与仓储中最新版本的区别6.管理修改
1.代码修改后还没加入暂存区
git checkout -- filename 撤销后代码和版本库最新版一样
2.代码修改后加入暂存区但未提交,又做了修改现在只想将后来的修改废弃
git checkout -- filename 撤销后代码和刚提交暂存区时一样
3.代码修改后加入暂存区但未提交,现在想废弃这段改动(废弃暂存区该代码 ——>废弃工作区该代码)
git reset HEAD filename 撤销暂存区该文件的改动
git checkout -- filename 撤销后代码和版本库最新版一样
4.修改了代码并提交了本地仓储
git reset --hard HEAD^ 回退版本
注意:检验完毕后再推送代码到远程仓储7. 删除文件rm <file> 删除文件
情景:删除了文件file,工作区和仓储文件不再一致
1. 直接删除仓储中该文件并提交
git rm <file> 删除仓储中文件file
git commit -m '删除了file' 提交仓库
2. 误删除了文件file直接从仓库回复即可
git checkout -- file
注意:从来没有被提交到版本库中就被删除的文件是无法恢复的8.1 创建和合并分支git branch dev 创建dev分支
git checkout dev 切换到dev分支
git checkout -b dev 创建并切换dev分支
git branch 查看当前所在的分支 *代表当前分支
git branch -a 查看远程分支列表
git merge dev 合并指定分支到当前分支
git branch -d <name> 删除指定分支
git branch -D <branch> 强制删除分支8.2 分支合并冲突分支1和分支2存在冲突时无法正常合并,git会用<<<<<< , ======,>>>>>>标记冲突所在(master|merging)
解决:
a.手动删除(2中修改保留一种即可)
b.git add ->git commit 就会自动合并
git log --graph --pretty=oneline (查看合并情况)
git log --graph --pretty=oneline --abbrev-commit(查看合并情况【版本id缩略显示】)8.3 分支管理策略Faste forward模式合并分支:
如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧
这就意味着这种模式下合并分支是没有历史的,看不出曾经做过合并
git merge --no-ff -m '合并说明' <branch> 使用普通方式(禁用fast forward模式)合并 8.4 stash的使用和bug分支stash:手头工作没有完成时可以用stash现将工作现场保存一下,然后干别的
git stash list 查看场景暂存版本
git stash pop 恢复工作现场并删除stash中的内容
git stash apply [stash@{0}] 只恢复不删除stash中的内容【指定版本】
git stash drop 删除stash中内容
stash可以存储多个工作场景然后指定版本恢复就可以,实际工作中现存现恢复删除即可,没必要存储多个版本
情景:开发中突然接到紧急改BUG的任务,但是手头的工作还没有提交而且只进行一部分没法提交,该怎么解决?
解决:
a. 将工作场景用stash暂存
git stash 暂存工作场景
b. 确保工作区干净的然后切换到理想分支(假如是master分支)创建分支修复bug
git checkout master
git checkout -b issue-101
c. 修复bug后提交修改,然后切换到理想分支合并;(假如issue101用不到就可以删除了)
git add -> git commit -m 'fix bug 101'
git checkout master
git merge --no-ff -m 'merged bug fix 101' issue-101
删除分支issue-101
git branch -d issue-101
d. 回到dev分支,恢复工作场景暂存后继续干活
git checkout dev
恢复工作场景暂存后继续干活
git stash pop 恢复同时删除stash中的内容8.5 Feature分支在开发一个新功能时最好新建一个feature分支在上面开发,完成后合并最后删除分支即可
a. 可以防止把主分支搞乱
b. 假如某个功能临时决定就取消了,在合并到主分支之前直接强制删除该分支即可9.链接远程仓储
git remote -v 查看远程详细信息,假如没有推送权限就看不到push地址
git pull [origin dev] 从远程拉取代码并合并
git push origin <branch> 将branch分支代码推送到远程master分支
GitHub篇
1.用git生成SSH密钥
ssh-keygen -t rsa -C "yourEmail"
成功后会在用户根目录(C:\Users\用户\.ssh)生成.ssh目录包含id_rsa(私钥)和id_rsa.pub(公钥)两个文件
2.将id_rsa.pub中的内容全部复制粘贴到github->setting->SSH keyes-->add key-->key中(title随意)
3.关联本地仓储(master分支)
$git remote add origin git@github.com:XXX/XXX.git(推荐ssh协议地址)
$git remote rm origin (删除关联github项目地址,然后再关联即可修改项目地址)
4.向远程推送
git push -u origin master 首次推送
(Git将本地的master分支内容推送的远程新的master分支,并将本地的master分支和远程的master分支关联起来令)
git push origin master 以后推送
5.从远程克隆代码(在想要创建项目的目录处git bash)
$get clone git@github.com:zccxy/Repository.git (推荐ssh协议)9.1 多人协作
多人协作
1. 从远程拉取代码并合并 git pull
2. 如果有冲突解决冲突并在本地提交
3. 没有冲突或者解决冲突后 git push origin <master/dev>
哪些分支需要推送到远程库?
master 分支 : 主分支时刻保持和远程同步
dev 分支 : 开发分支,和远程代码同步保证共享
bug 分支 : 用于本地bug修复,一般不推送
feature分支 : 看具体情况
在git clone时git已经将本地的master分支和远程的master分支对应起来了远程仓储默认origin
dev分支更新远程dev分支代码
1.查看本地是否有dev分支/远程是否有dev分支
+ git branch
+ git branch -a
2-1.如果远程有dev分支,且本地有没有dev分支
+ git fetch origin dev (此时自动关联本地和远程的dev分支,后续只要执行步骤5即可)
2-2.如果远程有dev分支,本地创建了dev分支;
+ git checkout -b dev origin/dev
3.拉取远程代码(远程有dev分支)/直接推送到远程(远程没有dev分支)
+ git pull origin dev
+ git push origin dev
4.关联本地dev分支和远程dev分支
+ git branch --set-upstream-to=origin/dev dev
+ git push --set-upstream origin dev 首次关联+推送
5.后续推送代码到远程dev分支
+ git pull
+ git push origin dev