目录
一、洞悉[1]
本地分支与远程仓库联系关系总结:
查看默认追踪:
git config --list拉到底下会看到所有远程仓库及所有默认追踪【有则显示】git status工作区干净情况下,底下可以看到当前分支的默认追踪【有则显示】git branch -vv所有本地分支及所有默认追踪【有则显示】及所有分支提交的信息
绑定及修改默认追踪(特别是对于多个远程仓库)
- 绑定: push时,绑定:
git push -u 主机名 本地分支:远程分支
【优点】远程仓库可以不存在时也可以操作
【缺点】会附带push
【总结】绑定- 修改:
git branch --set-upstream-to=主机名/远程分支 本地分支
【优点】没有副作用
【缺点】必须要有该远程分支(因为只有push能修改远程分支)
【总结】修改(特别适合多仓库时,切换追踪查看情况)
--set-upstream-to在pull时,如果没有默认追踪,则会提示这个命令
查看所有分支:及同步远程分支
git branch -vv所有本地分支及所有默认追踪【有则显示】git branch -a所有本地分支及所有远程仓库及分支
同步远程分支---说明
- git branch只能知道远程最后一次更新下来后的远程分支(pull/fetch或clone)及自己后续对远程分支的操作。但其它同事的远程分支操作并没有更新到下来
- 可能同事A删除了远程某个分支,则会和自己本地显示的远程分支不同步
解决方法
git pull/fetch
【优点】拉取的时候会自动更新该远程仓库的分支
【缺点】不及时,且拉取的只是该远程仓库的的分支
【总结】自动同步git remote update
【优点】会更新所有远程仓库的分支
【缺点】和原来本地保留的远程分支或操作。即:只会添加,不会去掉远程不存在的远程分支。查看文章
【总结】手动同步,且要保留之前的远程分支git remote update -p|--prune 主机名
【优点】 和原来本地保留的远程分支并操作。即和远程完全一样,会剔除掉不存在的远程分支。
【缺点】只会更新该远程仓库的分支
【相同命令】git remote prune 主机名查看文章
【总结】手动同步,且要和远程仓库保持一致
查看所有远程仓库:
git remote -vv所有远程仓库git remote show 主机名一个个主机查看,可以查看远程仓库及分支,及该仓库对应本地的所有默认追踪【有则显示】
二、工作顺序[2]
【正确的工作顺序】
【总结】工作前,git pull及push前,git pull
【总结】多用git status
【总结】多用git diff
- 工作前
git pull。同事A,先git pull 主机名 远程分支:本地分支或简写- 再
git status。因为:
- 如果工作区干净,git pull则会直接更新到工作区
- 如果工作区进行了操作,则会更新到暂存区,此时git status会发现和暂存区不一样。并且会提示你是丢弃工作区还是保留。
若保留:直到你git commit ,后会自动进入merge解决冲突操作。最后push即可
- 开始工作
push前,再git pull,若有冲突,解决冲突,再push- 同事B工作前,也是以上步骤
说明
pull可能会有冲突:若工作区不干净,git commit后自动进入push可能会有冲突:若有冲突,自动进入
三、常用命令总结[3]
- 初始化仓库:
git init
- 增删改查配置:
git config基本格式:
git config [--local|--global|--system]
- 增:
--add section.key value- 删:
--unset {key}、--unset {key} value、--unset-all {key}- 改:
section.key value- 查:
{key}、--get-all {key}、--list- 编辑:
--edit
- 提交到暂存区:
git add [<file>|<path>]可以简写git add .说明:.表示根目录(以下path都可以.)后悔药:
git rm --cached [<file>]撤销追踪git checkout -- [<file>|<path>]从暂存区重置到工作区(工作区撤销修改)git reset HEAD [<file>|<path>]从版本库重置到暂存区(暂存区撤销修改)补充:
- 好习惯:add前,查看工作区和暂存区的区别:
git diff- 好习惯:每次操作后,
git status查看git状态
- 提交到版本库:
git commit -m '这次提交的说明'后悔药:
git reset --hard HEAD^版本回退
对比暂存区及工作区的重置:因为版本库有多个版本,所以可以选择重置到哪个版本
说明:
提交到远程仓库前,都有后悔药(远程仓库版本个人没权限修改)补充:
- 好习惯:commit前,查看暂存区和版本库的区别:
git diff --cached
- 查看提交历史:
$ git log(版本库中往前查:已删除的或往后的查不到)相关操作:
$ git reflog查看提交日志(本地提交记录查:这台电脑所有的提交)
- 增删改查本地分支:
git branch
- 增:
$ git branch <BranchName>- 删:
$ git branch -d <BranchName>说明:-d即delete删除- 改:
$ git branch -m <old_branchName> <new_branchName>说明:-m即modify修改- 查:
git branch、git branch -a、git branch -vv
- git diff 比较差异:
- 工作区和暂存区比较:
git diff- 暂存区和版本库比较:
git diff --cached- 版本库和远程仓库比较:
git diff 本地分支 <remote>/远程分支- 分支比较:
git diff 分支1 分支2
把结果输出到指定文件:后面加
>>文件名.diff
- 提交到远程仓库:
git push
- 完整命令:
git push 主机名 本地分支:远程分支- 简化:
git push需要设置默认的主机(远程分支默认和本地分支同名)
$ git push --set-upstream|-u <remote> 本地分支:远程分支- 若不同名,要设置:
git config --global push.default upstream通过以上命令可以发现:
git push也可以修改远程分支
- 增:
git push 主机名 本地分支:远程分支- 删:
git push 主机名 :远程分支- 改:先删,在增
- 查:同branch命令:
git branch -a、git branch -vv
- 拉取更新
git pull和git fetch完整命令:
$ git pull 主机名 <远程分支名>:<本地分支名>
$ git fetch 主机名 <远程分支名>:<本地分支名>
区别:
git pull和git fetch的区别
查看文章
- 克隆项目
git clone <remote_url>
- 仓库命令
$ git remote
- 增:
git remote add [shortname] [url]- 删:
git remote remove <name>- 改名字:
git remote rename <old> <new>
改网址:git remote set-url <name> <newurl>]
改网址(增):git remote set-url --add <name> <newurl>]可以push多个仓库- 查:
git remote、git remote -v、git remote show 主机名- 更新远程分支:
git remote update、git remote update -p|--prune <remote>、git prune <remote>
- 合并分支
- Fast-forward(ff)模式:
git merge -ff other_branch
简写git merge other_branch- --no-ff模式:
git merge --no-ff -m '提交信息' other_branch
- 本地缓存:将工作区和暂存区缓存起来。并使其重置为上次提交后的状态
- 增:
git stash push -m '这次缓存的信息'- 删:
c drop <stash_index>或git stash drop删除栈顶
全删:git stash clear- 应用:
git stash [apply|pop] <stash_name>或git stash [apply|pop]应用栈顶那个- 查:
$ git stash list