Git 教学

Git 教学

基本常用命令

第一次使用 git 的时候,需要设置用户信息和用户邮箱,用于辨识提交者身份。

git config --global user.name <git用户名> git config --global user.email <邮箱地址> git config --list # 查看当前用户信息

基本操作

git init # 把当前的目录变成可以用 git 进行版本控制的 git 仓库,生成隐藏 .git 文件。 git clone <repository-url> # 从远程库中克隆到本地 git status # 查看所有文件状态 加参数 `-s` 显示已修改的 git add xxx # 把 xxx 文件添加到暂存区去。 git add –A # git add --all的缩写,添加全部到暂存区 git add –u # 把文件的删除和修改添加到暂存区(不包括新增) git add . # 监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区 git commit -m "message" # 从暂存区提交到本地仓库 git commit -a -m "message" # 相当于省略 git add,但是无法提交新增的文件 git push origin master # Git 会把 master 分支推送到远程库对应的远程分支上 git clean # 删除非管理对象的文件

“commit message” 内容尽量规范!

  • 当某一次提交后,突然想起漏提交了文件,或不小心提交了不满意的代码时,可以使用 git commit --amend -m "message" 指令。它可以在不增加一个新的 commit-id 的情况下将新修改的代码追加到前一次的 commit-id 中。提交之后 message 也将被本次的 message 覆盖,所以还需要再次添加上次的 message。

push

git push origin name git push –u origin master git push origin --delete name # 删除远程分支

把当前 master分支推送到远程库; -u 表示记住分支和地址,下次使用 git push 即可。

remote

git remote add origin <repository-url> # 关联一个远程库 仓库名叫 origin git remote # 查看远程库的信息 git remote –v # 查看远程库的详细信息

clone

git clone <repository-url> # 从远程库中克隆 git clone -b branchName <repository-url> # 克隆指定分支

pull

git pull

从远程仓库拉下来到本地库然后合并相当于 git fetch + git mergepull 时,Git 默认会把合并也提交到远端,需设置关闭

  • 一般 push 前先拉去最新版本,避免代码冲突,如果有冲突需要解决了冲突才能提交。

fetch

git fetch # 从远程库抓下最新版本,但是不合并。

fetch 是从远程库到本地库,但是未在工作区,需要 git merge

merge

git merge dev # 在当前的分支上合并dev分支

分支合并也是在本地完成,新的分支只有在合并后才允许被删除。

  • 如果分支合并是出现冲突需要解决了冲突才能合并,使用 git status 查看冲突文件。

branch/checkout

git branch # 查看当前所有的分支,前面有 "*" 的为目前所在的分支。 git branch name # 创建分支 git branch –r # 看远程所有分支 git branch –a # 查看本地远程分支 git branch –d name # 删除分支 git push origin --delete name # 删除远程分支 git checkout name # 切换分支 git checkout –b name # 创建并切换到 name 分支上 git clone -b name url # 克隆指定分支代码文件 git push name # 提交到指定分支 # 合并分支(主分支操作) git checkout master git merge <commit> or <branch_name> git push

!> git checkout -- file 相当于取消对文档的修改,将最新的本地版本库的本文件复制覆盖它,比较危险!

reflog/log

git log # 显示所有提交过的版本信息:commit id,提交者,日期(完成后按 Q 键退出)。 git reflog # 查看历史记录的 commit id

?> 想看到自己的操作记录,则可以使用 logreflog,它两个的区别如下。

  1. git log 命令可以显示所有提交过的版本信息。
    • 如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息。
  2. git reflog 可以查看所有分支的所有操作记录,包括已经被删除的 commit 记录和 reset 的操作。
    • 常用语错误/危险操作恢复、回退。

reset

git reset --hard HEAD^ git reset --hard HEAD~ # 回退到上一个版本 git reset --hard HEAD~100 # 回退到 100 个版本 git reset head -- file # 不加 file 则全部退回 git reset file # 将本地仓库的当前版本退回至暂存区,相当于取消暂存。
  • 版本回退的操作一般是先查看历史提交版本的 commit id,使用 git reflog
  • 接着使用命令 git reset --hard commit_id 回退版本
  • 最后 git push -f (origin master可写可不写) 提交远程库,前提非 protect 分支。
  • 版本退回是从本地仓库到暂存区,如果已经提交远程库,此时的版本是低于最新的版本的会拒绝提交,
  • 所以需要用 git push -f origin master 强制提交。

status

git status

查看你的文件在暂存区和工作目录的状态,默认是较为详细的显示,并提示你可以用何种命令完成你接下来可能要做的事情。

git status -s
  • 较为简单的输出当前的状态,如:
$ git status -s M README.md D hello.rb ?? world.java

你可以看到,在简短输出中,有两栏。第一栏是暂存区的,第二栏则是工作目录的。这里表示:

  • README.md 在暂存区中的状态是 modify
  • hello.rd 在工作目录中的状态是 delete
  • world.java 还未添加到版本控制。

diff

git diff xxx # 查看 xxx 文件修改了哪些内容 git diff # 工作目录和暂存区 git diff --cached # 暂存区和本地仓库 git diff HEAD # 工作目录和本地仓库 git diff --stat # 显示信息摘要

rm/mv

git rm # 将文件从暂存区和工作目录删除,-f 为强制删除 git rm filename # 删除文件 git rm –r dirname # 删除文件夹 –r 表示递归所有子目录 git rm --cached <path> # 将文件从暂存区中删除 git mv <old_path> <new_path>

git rm 用来删除文件、目录。git mv 命令用于移动或重命名一个文件、目录。

  • 比如删除 photos 文件,本地删除后,远程仓库还会有,所以执行如下操作:
git rm -r photos git commit -m "删除相册" git push

submodule

添加子模组

git submodule add <url> # 添加子模组 git submodule init # 子模组初始化 git submodule update # 子模组更新 git submodule update --remote # 子模组更新后父模组也要更新 # 当需要用到别人的项目代码时,可以在自己的仓库添加子模组。 git submodule add <url> # 添加子模组 git submodule init # 初始化子模组/刷新 git commit -m "备注" # 提交变动到本地库 git push origin master # 将本地库同步到远程库

修改/删除子模组

  • 如果远程库子模组有更新,你要更新本地库子模组应该在 git pull 之后运行。
git submodule update

如果要更新子模组,子模组和父版本库要分别提交,注意:子模组进行更新后,父版本库需要添加这个更新再推送,即 git add。

# 删除子模组 手动删除 然后修改 config 文件 # 命令删除 git rm --cached # 子模块目录 删除子模块缓存 rm -rf 子模块目录 # 删除子模块目录 vim .gitmodules # 删除对于子模块相关条目 vim .git/config # 删除配置项中子模块相关条目 # 修改子模组(本地) # 修改后 git submodule add 相对路径 # 添加子模组 git submodule init # 初始化子模组/刷新 git commit -m "备注" # 提交变动到本地库 git push origin master # 将本地库同步到远程库 # 然后父模组 git status git add . or -A git commit -m "修改子模组" git push origin master
  • 当一个远程库有子模组时,直接 clone 子模组只是一个空文件夹,需要进入子模组的空文件夹 initupdate 才行。
  • 或者使用递归克隆 git clone --recursive 远程库
  • 子模组更新后,父模组必须更新,因为需要更新 commit id。

tag

基本命令

git tag -a v1.0 # 给最新一次提交打标签 git tag -a <tagname> -m '标签' # 指定标签信息命令 git tag # 查看版本打的 Tag,显示的标签按字母顺序排列,所以标签的先后并不表示重要程度的轻重。 git tag tagname # 给本次提交添加标签 git push --tag # 推送本地标签到远程 git push origin –tags or tagname # –tags 所有标签,tagname 单个标签。 git tag -d tagname # 删除本地标签 git push --delete origin tagname # 删除远程标签

我们可以用特定的搜索模式列出符合条件的标签。在 Git 自身项目仓库中,有着超过 240 个标签,如果你只对 1.3 系列的版本感兴趣,可以运行下面的命令:

git tag -l 'v1.3.*' # 结果全为 v1.3 开头的标签 v1.3.1 v1.3.2 v1.3.3 v1.3.4
  • 当你执行git tag -a命令时,Git会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。
  • 如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。
  • 例如,假设我们发布了提交 85fc7e7(最后一行),但是那时候忘了给它打标签。 我们现在也可以。
$ git tag -a v0.9 85fc7e7 $ git log --oneline --decorate --graph * d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代码 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 (tag: v0.9) 第一次版本提交 git show # 可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。

同步远程-本地Tag

git tag | xargs git tag -d git fetch --tags

推送标签

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname] 即可。

  • 如果要一次推送所有本地新增的标签上去,可以使用 --tags 选项;然后,其他人克隆共享仓库或拉取数据同步后,也会看到这些标签。

stash

git stash # 把当前的工作隐藏起来,等以后恢复现场后继续工作。 git stash list # 查看所有被隐藏的文件列表

gitk

gitk # git 自带 GUI gitk --all

其他


?> 在克隆远程库曾出现问题:没有弹出输入框验证框,直接就提示认证失败。

解决办法:使用 Git 输入下面两条命令(需要管理员权限)

git credential-manager uninstall # 清除缓存账号密码(卸载) git credential-manager install # 安装资格证书

?> 在提交上传远程库曾出现问题:git push 提交到远程仓库时,git 会卡住等半天都没反应,只能按 Ctrl+C 退出。

解决办法:使用 Git 输入以下面的命令

git config --global sendpack.sideband false # 配置文件添加属性

输入下面的命令可以查看仓库配置,看到 sendpack.sideband 等于 false 就可以重新 push 了。

git config --local -l # 查看配置信息

?> 托管网站解释

  • 一个组织可以有 0-N 个用户,一个用户默认为一个组织,可以加入多个组织。一个组织有 0-N 个仓库,一个仓库中有 0-N 个代码文件。
  • 工单可以反馈问题情况等,里程碑是开发者建立(要在某个时间之前完成什么功能)。
  • 提交(Commit)可以与工单关联,工单(Issue)可以与里程碑关联。
  • 版本发布是发布重要的版本
  • 百科是开发者编写关于这个项目的一些内容
  • 动态可以看到仓库的变动信息
  • fork 相当于克隆仓库 后续不会改变。镜像仓库可以随父仓库更新,主要用于国外网站,创建一个国内的镜像来加快响应速度。

教学推荐

本文使用 文章同步助手 同步

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

推荐阅读更多精彩内容

  • 查看版本:git --version 创建版本库:git init 查看git 脚本目录:git --exec-p...
    渡边Hok阅读 552评论 0 0
  • Git安装 地址:https://git-scm.com/downloads 下载对应平台的git版本安装即可 G...
    foxleezh阅读 3,911评论 0 11
  • 1,查看所有远程分支:%git branch -r 2, 拉取远程分支并创建本地分支git checkout -...
    will666阅读 2,061评论 0 18
  • git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git b...
    猿万阅读 5,046评论 1 45
  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,921评论 2 88