文章目录
基于《2018.06.07 - Git》
Git基础概念
- 工作文件夹(Working Directory)
- 暂存区(Stage,Index)
- 本地仓库(本地Repository,HEAD指针)
Git命令行
-
分布式版本控制系统
-
SVN
-
安装git
- sudo apt-install git
-
新建目录
- mkdir learngit
-
将目录变为git管理的仓库
- git init
-
提交文件至git
- git add xxx(文件)
- git commit -m ‘注释’
-
第一次运行时会unable,需要告诉git:你是谁
- git config --global user.email ‘youremail’
- git config --global user.email ‘yourname’
-
查看git记录
- git log
- git reflog查看所有log
-
查看当前用户(global)配置
- git config --global --list
-
更新git
- git add xxx(文件)
- git commit -m ‘注释’
-
回到某版本(丢失目前代码)
- git reset --hard XXXX(版本号前几位)
- git reset --hard e299
- git reset --hard e360e
-
撤销某次提交
- git reset --soft XXXX(版本号前几位)
-
使暂存目录的指定文件覆盖工作目录
- git checkout – file
-
查看仓库当前状态(查看工作目录与暂存目录的区别?)
- git status
-
删除
- git rm xxxx(要删除的文件)
git diff
- 比较工作区与暂存区
- git diff 不加参数即默认比较工作区与暂存区
- 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
- git diff --cached [
…]
- git diff --cached [
- 比较工作区与最新本地版本库
- git diff HEAD [
…] (如果HEAD指向的是master分支,那么HEAD还可以换成master)
- git diff HEAD [
- 比较工作区与指定commit-id(快照ID)的差异
- git diff commit-id [
…]
- git diff commit-id [
- 比较暂存区与指定commit-id的差异
- git diff --cached [] [
…]
- git diff --cached [] [
- 比较两个commit-id之间的差异
- git diff [] []
- 使用git diff打补丁:Git diff 常见用法
- git diff 汇总图
本地与远程仓库(GitHub/Gitlab)
先建立本地仓库,后建立远程仓库
- 与远程仓库建立管理
- git remote add origin git地址
- 比如:git remote add origin https://github.com/mlbjay/learngit.git
- 同步远程仓库
- 拿下来:git pull origin master
- 会覆盖本地未commit的文件
- 推上去:git push -u origin master(第一次需要些-u)
- 拿下来:git pull origin master
- 注意:
- git pull失败 ,提示:fatal: refusing to merge unrelated histories
- 在进行git pull时,添加一个可选项:git pull origin master --allow-unrelated-histories
先建立远程仓库,后建立本地仓库
- 直接拷贝到本地
- git clone git地址
其他代码管理
- coding
- gitlife
- 码云
分支
-
查看分支
- git branch -a:查看所有分支
-
新建分支
- git branch xxx(分支名称)
-
切换分支
- git checkout xxx(分支名称)
-
合并分支
- git merge xxx(分支名称)
-
删除分支
- git branch -d xxx(分支名称)
-
在分支(other1)commit, push后,github会对应出现other1分支。
如何同步远程与本地
利用branch
- 以master分支为线上代码
- 新建分支编写自己的代码
- 在新分支编写代码
- push之前,保证与远程厂库一致
- 用远程仓库强制覆盖本地仓库
- git fetch --all
- git reset --hard origin/master
- git pull
- git强制覆盖本地命令(单条执行)
- git fetch --all && git reset --hard origin/master && git pull
- 然后通过git merge合并,在master分支合并新分支
- 合并过程中查看哪些部分不一致,一一核查
- 最后在push master分支
利用git fetch
- 更新本地的远程分支
- git fetch origin
- 比较本地与远程的差集 :(显示远程有而本地没有的commit信息)
- git log master…origin/master
- 统计文件的改动(未尝试成功)
# git diff <local branch> <remote>/<remote branch>
git diff --stat master origin/master
利用git stash
- git stash保存当前工作代码到git栈,并恢复到之前版本
- git stash apply恢复到之前保存工作代码
查看所有log
- git reflog
git clone
- http链接:git clone http链接
- ssh链接:git clone ssh链接(没有成功)???
- 用户名与密码的示例:git clone robin.hu@http://www.kernel.org/pub/scm/git/git.git
- 会提示输入密码
git cherry-pick
对某个分支提交 其他分支上的某个commit
git cherry-pick
:可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。