Git基本操作

只为记录,以后尽量按照Git的官方帮助文档写!

clone

  • 从远程库中克隆到本地目录
git clone <版本库地址> <本地目录>
//在当前目录创建新一个文件夹文件夹
mkdir <文件夹名称>
//进入到这个文件夹
cd <文件夹名称>
git clone <版本库地址>

init

此命令用于已有项目,然后想用Git管理项目

  1. 进入到项目目录(例如在桌面)
    cd ~/desktop/xxx
  2. 初始化仓库
    git init
  3. 将所有文件添加到索引库
    git add .
  4. 提交代码并填写提交信息
    git commit -m "xxxx"
  5. 添加远程呢很难过Git地址
    git remote add origin <地址>
  6. 如果网页创建仓库存在xxx.md文件或其他的文件,需要先将远程库的文件更新下来才能将本地项目推送到远程,如果仓库是空则忽略这个步骤
    git pull --rebase origin master
  7. 将项目推送到远程仓库
    git push -u origin master

config

此命令用于获取并设置存储库或全局选项。这些变量可以控制Git的外观和操作的各个方面。

  • 配置用户名和密码(当安装Git后首先要做的事情,因为每次提交Git都会使用该信息,它被永远嵌入到了你的提交信息中)
    git config --global user.name "xxx"
    git config --global user.email "xxx"
  • 如果希望在一个特定的项目中使用不同的名称和e-mail地址,可以在该项目中运行该命令而不要--global选项
    git config user.name "xxx"
    git config user.email "xxx"
  • 配置编辑器(默认vim)
    git config --global core.editor xxx
  • 配置比较工具
//Git可以接受kdiff3、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff、ecmerge和opendiff作为有效的合并工具。也可以设置一个客户端的工具。
git config --global merge.tool xxx
  • 检查配置
    git config --list
    git config {key}
  • 添加配置项(sectionkeyvalue一个都不能少)
    git config [--local|--global|--system] --add section.key value
  • 删除配置项(sectionkey一个都不能少)
    git config [--local|--global|--system] --unset section.key

add

此命令将要提交的文件的信息添加到索引库中(将修改添加到暂存区)

  • 提交所有变化
    git add -A
  • 提交被修改(modified)和被删除(delete)文件,不包括新文件(new)
    git add -u
  • 提交新文件(new)合被修改(modified)文件,不包括被删除(delete)文件
    git add .
  • 提交指定/文件
    git add <文件路径>
  • 查看所有修改过或已删除文件但没有提交的文件
    git add -i
    git add -i.png

      Test1ViewController.m表示已经被执行过git add操作,待提交。即已添加到索引库中。
      project.pbxproj``Test2ViewContoller.h``Test2ViewController.m表示已处于tracked下,已经被修改了,但是还没有执行git add操作,即还没有添加到索引库中。
      通过编号首字母全称加回车执行子命令(例如:3rrevert)
      执行命令后,Git会列出文件,输入文件编号加回车则执行子命令操作,再次回车退出子命令。
      1. status子命令:查看文件状态都,与git add -i相似。
      2. update子命令:将文件加入到索引库中。
      3. revert子命令:把已添加到索引库中的文件从索引库中移除。
      4. add untracked子命令:把没有被git管理的文件添加到索引库中。
      5. patch子命令:补丁这一条没有看懂
      6. diff子命令:比较索引库中的文件与原版的差异。
      7. quit子命令:退出git add -i命令系统。
      8. help子命令:查看git add的帮助文档,也可以通过git add -h进入。

mv

  • name1重命名为name2(文件name必须真实存在)
    git mv name1 name2
  • 移动文件到指定目录下(文件与目录必须真实存在,并且在文件夹内部存在同名文件)
    git mv <文件> <文件夹目录>

reset

  • 回退到上个版本,只保留源码,回退commit和index信息
    git reset --mixed
    git reset
  • 回退上个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
    git reset --soft
  • 彻底回退到上个版本,本地的源码也会变为上一个版本的内容
    git reset --hard
  • 回退所有内容到上一个版本
    git reset HEAD^
  • 回退README.md这个文件的版本到上一个版本
    git reset HEAD^ README.md
  • 向前回退到第3个版本
    git reset --soft HEAD~3
  • 将本地的状态回退到和远程的一样
    git reset --hard origin/master
  • 会退到某个版本
    git reset xxx
  • 回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
    git revert HEAD

rm

  • 删除文件
    git rm xxx
  • 删除文件夹
    git rm -r xxx
  • 将文件从索引库中移除,对文件本身不做任何操作
    git rm --chcahed xxx

bisect

  用来查找哪一次代码提交引入了错误。
  它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。

  • 启动查错(必须在最上层路径)
    1、 起点是没有错误的提交指针,
    2、 终点是最近一次的HEAD。当然,指定其他范围也可以。
    git bisect start <终点> <起点>
    3、执行命令后,代码库会切换到这段范围的中间那次提交。
    4、测试项目,没有问题
    git bisect good
    5、测试项目,有问题
    git bisect bad
    6、接下来,不断重复这个过程,直到成功找到出问题的那一次提交为止。这时,Git 会给出如下的提示。
    xxx is the first bad commit
    7、退出查错
    git bisect reset
  • 根据指针查找提交代码,修改Bug。

grep

  检索当前目录下的文件中的内容


baba.txt.png

mama.txt.png
  • 检索指定关键字
    git grep www
    检索指定关键字.png
  • 检索指定关键字在哪一行
    git grep -n www
    检索指定关键字在哪一行.png
  • 检索指定关键字在哪些文件中
    git grep --name-only www
    检索指定关键字在哪些文件中.png
  • 统计每一个文件中包含关键字的行数
    git grep -c l
    统计每一个文件中包含关键字的行数.png
  • 在指定的commit中检索关键字
    git grep xxx <指针>
    git grep www HEAD #在最近一次提交中检索
    在指定的commit中检索关键字.png
  • 与条件检索
    git grep -e www --and -e good
    与条件检索.png
  • 或条件检索
    git grep -e www --or -e bad
    或条件检索.png
  • 与或组合条件检索
    git grep -e www \( -e bad -e good \)
    与或组合条件检索.png
  • 全匹配检索
    git grep --all-match -e www --or -e bad
    全匹配检索.png

    1、全匹配和普通匹配的区别在于,全匹配必须在全文满足指定的条件。
    2、比如上面的例子中,如果是全匹配,那么必须在文件中,同时具有wwwbad(没要同一行)。
    3、而普通匹配,只要在文件中具有www或者bad中的一个即可。

log

  如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明
  如果记录过多,则按Page Up、Page Down来控制显示
  按q退出历史记录列表

  • 按补丁显示每个更新间的差异
    git log -p
  • 尽在已修改的提交信息后显示文件清单
    git log --name-only
  • 显示ASCII图形表表示的分支合并历史
    git log --graph
  • 一行显示,只显示哈希值和提交说明
    git log --oneline
  • 查看文件某个范围的提交记录
    git log -L <起始行数>,<结束行数>:<文件名>

show

  • 显示文件
    git show <哈希值/tag版本>
  • 查看哈希值(需要到达文件的目录或添加文件路径)
    git hash-object <文件名>

status

  • 显示工作目录和暂存区的状态
    git status

branch

  • 查看当前有哪些分支(*表示当前所在分支)
    git branch
  • 新建分支
    git branch xxx
  • 查看本地和远程分支
    git branch -a
  • 查看远程分支
    git branch -r
  • 修改分支名
    git branch -m <old> <new>
  • 删除远程分支
    git push origin --delete xxx
  • 删除本地分支
    git branch -D xxx

checkout

  • 检出分支
    git checkout xxx
  • 新建分支
    git checkout -b xxx
  • 从远程取得本地分支
    git checkout -b xxx origin/xxx
  • 放弃当前文件的修改
    git checkout <分支名> <文件名>

commit

  • 提交
git commit -m xxx
git commit -a -m xxx
git -am xxx

diff

  • 比较当前文件和未提交的文件存在哪些差异
    git diff <file>
  • 查看所有文件和未提交的差异
    git diff
  • 比较已经提交文件和上次提交之间的差异
    git diff --cached
    git diff --staged
  • 显示下次提交会提交什么内容
    git diff HEAD
  • 比较两个分支最新提交
    git diff <分支1> <分支2>
    git diff <分支1>..<分支2>
  • 仅仅比较统计信息
    git diff --stat
  • 查看当前分支和其他分支的差别
    git diff <分支>
  • 比较两次提交的差异
    git diff <指针1> <指针2>

merge

  • 合并分支到当前分支
    git merge <分支1> <分支2>

mergetool

  1. 下载Beyond Compare 密码:1anl
  2. 打开Beyond Compare


    安装命令行工具.png
  3. 编辑配置文件
    git config --edit --global
  4. 将下方文本粘贴进去
[diff]
        tool = bcomp
[difftool "bcomp"]
        cmd = \"/usr/local/bin/bcomp\" \"$LOCAL\" \"$REMOTE\"
[difftool]
        prompt = false
[merge]
        tool = bcomp
[mergetool]
        prompt = false
[mergetool "bcomp"]
        cmd = \"/usr/local/bin/bcomp\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
  1. 合并不再生成备份文件
    git config --global mergetool.keepBackup false
  2. 使用方法
    git difftool <指针>
    git difftool <分支名>
    git mergetool

如果difftool需要对比的文件比较多,在你关闭Beyond Compare的时候它会再次打开,不要担心,这不是bug,这是主动打开下一个有差异的文件。不喜欢这样的话可以执行git config --global difftool.prompt true,这样的话每次弹出都会在终端询问一遍。

  1. Beyond Compare合并代码使用方法

rebase

  • 合并分支
    当前分支为dev分支checkout的分支,dev和当前分支都有修改,将当前分支的commit执行dev新的commit
    git rebase <dev>
    此过程可能会出现冲突
    解决冲突后执行git add .将所有修改添加到索引库
    完成修改后执行git rebase --continue,git会继续执行rebase操作
    或者可以执行git rebase --abort来终止rebase操作,并且分支会回到 rebase 开始前的状态。
  • 合并提交
//合并最近四次commit
git rebase -i HEAD~4
//合并提交从最近到指定commit(xxx为哈希值,可用`git log`指令查看哈希值)
git rebase -i xxx
//如果出现冲突解决办法如上一条操作
'pick':`生成一条提交`
`fixup`:`放弃本此提交记录`
`squash`:`合并本次提交记录到上一条`
  • 如果终端出现闪退
    git rebase --edit-todo

tag

  • 创建标签
    git tag -a xxx -m "xxx"
  • 查看所有标签
    git tag
  • 检索标签
    git tag -l 'xxx'
  • 删除标签
    git tag -d xxx
  • 创建轻量级标签
    git tag xxx
  • 后期加注标签
    git tag -a xxx <指针> -m "xxx"
  • 推送标签到远程
    git push origin xxx
  • 推送所有标签到远程
    git push origin --tags

fetch

  • 更新所有分支
    git fetch
  • 更新具体分支
    git fetch <远程主机名> <分支名>
    最后可用用mergerebase命令合并远程分支到本地分支。

pull

  • 拉取远程与本地分支合并(如果本地分支为当前分支:后则可以省略)
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:dev

push

  • 将当前分支推送到远程
    git push
  • 将本地分支推送到origin主机的远程分支(无远程分支则会新建一个远程分支)
    git push origin xxx
  • 推送指定分支到远程
    git push origin xxx:xxx
    1、如果省略本地分支
    git push origin :xxx
    3、表示删除指定远程分支,因为这等同于推送一个空的分支到远程
    git push origin --delete xxx
  • 推送所有本地分支到远程
    git push --all origin

stash

  • 储藏修改
    git stash
  • 储藏修改并添加提交信息
    git stash save "xxx"
  • 查看所有储藏
    git stash list
  • 恢复储藏
    1.apply恢复后不会在存储库中删除本条记录,pop回复后会在存储库中直接删除本条记录
    2.指针格式stash@{1},如果省略指针则表示恢复最近一条
    git stash apply/pop <指针>
  • 检查储藏修改文件
    1.指针格式stash@{1},如果省略指针则表示查看最近一条
    2.后面加-p--patch则可以查看详情
    git stash show <指针>
  • 删除储藏
    git stash drop <指针>
  • 清空储藏
    git stash clear

blame

  • 查看文件每行代码是谁修改的
    git blame xxx
  • 查看文件某个范围
    git blame -L <起始行数>,<结束行数> <文件名>
    git blame -L <起始行数>,+<显示行数> <文件名>

clean

批量删除未添加到索引库的文件
n查看
f文件
d文件夹

  • 查看当前目录下哪些文件将要被删除
    git clean -n
  • 删除当前目录下的文件
    git clean -f
  • 删除指定目录下的文件
    git clean -f <路径>
  • 删除文件和文件夹
    git clean -fd
    每次删除之前要加n查看下哪些要被删除,谨防删错。

reflog

  • 查看所有参考日志(定位到想要回退的版本git reset --hard HEAD@{n})
    git reflog <分支> <show>
  • 查看5条参考日志
    git reflog <分支> <show> -5
  • 删除某一条参考日志
    git reflog delete HEAD@{n}
    git reflog expiregit reflog exists这两条命令还没有研究明白
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • 原创文章&经验总结&从校招到A厂一路阳光一路沧桑 详情请戳www.codercc.com 1. git简介 在实际...
    你听___阅读 1,563评论 0 8
  • 常用客户端:Gitkraken, Fork, Github 客户端 (一) Git 命令 1. 初始化 Git 进...
    JacobLi阅读 241评论 0 0
  • 前沿:1. 本文是学习 廖雪峰git教程 时的一些笔记,大家想看详细版请阅读廖雪峰git教程2.本文中使用到的系统...
    前端唠唠嗑阅读 239评论 0 0
  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,753评论 0 10
  • 感人的故事,我觉得是没有的。就说自己正在经历的吧! 男朋友是边防军人,一年能见面的时间,最多就一次了,甚至是一年也...
    你的Charon吖阅读 503评论 0 3