git基本命令


参考
图解git原理与日常实用指南
git简明教程

版本控制系统

三个核心:

  • 版本控制
  • 主动提交(commit历史)
  • 远程仓库(协同开发)

中央式版本控制系统(VCS)

分布式版本控制系统(DVCS)

分布式与中央式的区别主要在于,分布式除了远程仓库之外,团队中每一个成员的机器上都有一份本地仓库,每个人在自己的机器上就可以做基本操作。

git 原理

三个基本概念

  • 工作区: 本地工作目录
  • 版本库: .git, git的本地版本库,所有版本信息都会存在这里 git commit
    HEAD指向最后一次提交
  • 暂存区: .git/index 缓存区,临时保存改动 git add

github ssh密钥添加

参考文章

克隆下拉

git clone -b branchname ssh://...

添加和提交

// 添加到暂存区
git add <filename>
git add .
// 提交改动
git commit -m "commit message"
// 更改最后一次提交
git commit --amend

推送改动

// 提交到远端仓库
// origin为远端仓库 master为远端仓库的分支
git push origin master
// 将仓库连接到远程服务器,并命名为origin
git remote add origin <server>

提交单个文件

// 添加到暂存区
git add a.c
// 忽略其他文件
git stash -u -k
// 提交修改
git commit -m "fix bug"
// 下拉合并
git pull
// 推送远程仓库
git push
// 恢复之前忽略的其他文件
git stash pop

分支

// 创建分支
git branch <分支名>
// 切换分支
git checkout <分支名>
// 创建并切换分支
git checkout -b <分支名>
// 删除分支
git branch -d <分支名>
// 推送本地分支到远端仓库
git push origin <分支名>

更新与合并

// 更新本地仓库到最新改动,从建立本地分支时的远程仓库分支(upstream分支)
git pull
// 从指定远程仓库
git pull <仓库名> <分支名>
// 合并其他分支到当前分支
git merge <其他分支名>
// 比较分支差异
git diff <source branch> <target branch>
// 默认比较working directory 相对于其他节点的变换
git diff <branch name>
git diff HEAD 
git diff //工作区对于Index暂存区的变化

git fetch 和 git pull的区别

#fetch
// 下拉远端指定分支的更新到版本库
// 取回的更新名字 远端服务器/分支,例origin/dev
git fetch <远端服务器> <分支>
// 默认取回origin服务器的所有分支更新,方便查看其他人的进度
git fetch
git fetch origin

#pull
git pull = git fetch + git merge FETCH_HEAD

回退

reset和checkout区别

// checkout除切换分支的功能,还可用于从历史提交/暂存区拷贝文件到工作目录
git checkout HEAD~ foo.c
git checkout <commitID> files
// Reset命令把当前branch/HEAD指向另一个位置,有选择的变动工作区和暂存区
git reset HEAD // Index回滚到最后一次提交

清除untracked files

// 查看要清除的文件及目录
git clean -nfd
//清除文件及目录
git clean -fd

查看各分支关系

git log --graph --decorate --oneline --simplify-by-decoration --all

标签或其他

git log
git status

关联远程仓库

git init
git add .
git commit -m "first commit"
git branch -M master
git remote add origin git@
git push -u origin master

子模块

  • 将一个仓库作为另一个仓库的子目录,并保持提交独立
// 添加子模块, 默认path为子模块项目名称,可自定义
// url为子模块项目路径 例如https://github.com/chaconinc/DbConnector
git submodule add url path
// .gitmodules文件进行版本控制
// 克隆含有子模块的项目,会包含子模块目录,但为空文件夹
// 初始化子模块配置文件
git submodule init
// 拉取子模块
git submodule update
// 其他拉取子模块的方法
git submodule update --init
git submodule update --init --recursive
// 克隆项目时包含子模块
git clone --recursive--submodules url_parent

//查看远端子模块的修改
cd DbConnector
git fetch
git merge origin/master
// 查看子模块修改情况
git diff --submodule
// 自动抓取更新
git submodule update --remote DbConnector

版本差异

  • git diff:比较文件在工作区和暂存区的差异
// 显示暂存区和工作区的差异
git diff [file]
// 显示暂存区和上一次提交的差异
git diff --cached [file]
git diff --staged [file]
// 显示工作区和上一次提交的差异
git diff HEAD [file]
// 显示工作区与指定commit的差异
git diff commitid [file]
// 显示暂存区与指定commit的差异
git diff --cached commitid [file]
// 显示两个commitid之间的差异
git diff commitid1 commitid2
// 打补丁
git diff > patch
git diff --cached > patch
git diff --HEAD > patch
// 在其他机器对应目录下应用补丁
git apply patch
// 检查是否可顺利打补丁
git apply --check patch
// 将能打的补丁先打上,冲突的生成.rej,手动打补丁
git apply --reject patch
// 比较两个branch最后提交的内容差异(详细)
git diff branch1 branch2
// 显示两个branch有差异的文件(不详细)
git diff branch1 branch2 --stat
// 显示指定文件的具体差异内容
git diff branch1 branch2 -- [file]
// 查看两个分支commit的不同
git log dev...master
// 同时显示每个commit在哪个分支上
git log --left-right dev...master
// dev的log有,master的log没有的commit
git log dev ^master
// 查看dev比master多的commit
git log master..dev

打补丁

// 放弃之前的操作
git am --abort
// 查看补丁状态
git apply --stat new.patch
// 检查补丁是否能打成功
git apply --check new.patch
// 打补丁
git apply new.patch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值