目录
一、洞悉[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
网友评论