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 merge
,pull
时,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
?> 想看到本人的操作记录,则能够应用 log
与 reflog
,它两个的区别如下。
-
git log
命令能够显示所有提交过的版本信息。- 如果感觉太繁琐,能够加上参数
--pretty=oneline
,只会显示版本号和提交时的备注信息。
- 如果感觉太繁琐,能够加上参数
-
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 子模组只是一个空文件夹,须要进入子模组的空文件夹
init
和update
才行。 - 或者应用递归克隆
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 教程