乐趣区

关于git: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

其余

  • Learn Git Branching
  • 非凡问题解决

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

解决办法:应用 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 相当于克隆仓库 后续不会扭转。镜像仓库能够随父仓库更新,次要用于国外网站,创立一个国内的镜像来放慢响应速度。

教学举荐

  • Gitee 教程
退出移动版