git 不完全教程
概念
- 工作目录:当前所见,Working directory
- 暂存区域:以后要提交到仓库的文件,称为Index或者staging area
- Git 仓库:持久化存储快照的地方,HEAD指针所指向的地方
Git 基本工作流程:
- 修改文件,会被git觉察
- 手动选择修改过的文件以暂存文件。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
git 设置命令
1.git config
设置本地用户信息
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
如果使用了 --global 选项,就是全局设置的。
2.git config --list
列出所有 Git 的配置选项
3.git help [你想了解的git命令]
,获得详细解释
git 暂存操作命令
1.git init
创建仓库
2.git status
查看git状态
创建或修改文件,会被git发现差异,git status
可以查看这些变动
3.git add [fileName]
暂存或追踪文件
git statu查看git状态是查看的当前git所追踪的文件的变动状态,之所以git不自动追踪所有文件的原因是给用户的选择空间。所以才有暂存的存在,暂存过的文件就会被git做diff比较,进而可以将暂存区的内容存入仓库。加入暂存这一操作,被git称作追踪track。所以追踪一个文件和暂存一个文件本质区别不大。所以都适用git add一个命令完成。如果你不知道哪些需要增加到暂存,git status会告诉你
想要增加更多或者全部文件,可以使用git add *或.或-A或-all,如果想要配置不需要追踪的文件,可以在仓库跟目录下创建.gitignore,来看一个实际的例子:
$ cat .gitignore
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有以波浪符(~)结尾的文件
4.git checkout [fileName]
从暂存区取回并替换工作区文件
5.git reset [fileName]
删除暂存区的内
6.git diff fileName
查看改了具体内容
总结:暂存一方面起到临时保存的作用,还有追踪的作用。通过暂存,可以简单的保存,但是作用有限 ,比如,你暂存了某个文件并再次做了修改,如果你从暂存区checkout后,你就再也找不到最新修改的部分了。并且,如果你多次暂存了这个文件,暂存区只有最近一次暂存状态,你不能查看前几次修改的快照。所以对此需求,就需要将快照持久化,也就是commit提交到仓库。
对git来说,有如上流程,add the file, edit the file, stage the file,remove the file我们已经说过,完整commit提交后,原本暂存区中保存的修改了的内容就会被清空,git会认为当前是环境是干净的,没有被修改过的,原因有二:
1.既然已经将修改持久化保存,就算清空暂存区也不会出错。
2.如果暂存区不会清空,就可以无限提交,显然这是不被允许的。
git 仓库操作命令
1.git commit -m '提交时的文字描述'
该命令可以提交暂存区内容到仓库,也就是将暂存区的内容持久化保存为仓库中的快照,成功提交后,git将打印这次提交的快照的索引号,如果你愿意的话可以记住,很多gui工具都不需要你记,有些时候,如果你觉得先把修改提交到暂存区再提交到仓库多此一举,实际上可以一步直接将修改提交到仓库
git commit -a -m '提交时的文字描述'
2.git mv old new
如果你移动了或者重命名了一个文件,git就认为这是新的,实际上,我们想让git知道这是仓库中的文件而不是新文件你需要git mv README.md README
,为什么要让git知道呢?
a.如果git不知道,那就认为是新文件,
b.如果git不知道,在多人合作时,合并代码就会出问题
3.git log
查看历史提交
如果你只想看最近两次的历史,使用git log -2
,
如果想看历史详细差异,git log -p
精炼的查看历史信息,git log --pretty=format:"%h - %an, %ar : %s"
,
--graph
可以可视化展示分支图
git reflog
查看历史操作,用于挽尊
4.git commit -amend '提交时的文字描述'
重新提交
有时你在某次提交后,发现漏提交了一些文件,或是某次提交信息不够完善,总之你想重新编辑这次提交,你可以做完一系列操作后使用这个命令
5.git reset --hard/soft/mix [索引号]
. 切换到某一次提交
但凡你不知道你在做什么,请操作之前一定提交后推送到远程,在工作目录保持干净的情况下在使用这个命令。
git reset file
,会将暂存区的file删去,也可以git reset 清空暂存区
git reset commit file
,如果commit不是head,将commit的file 放入暂存区
6.git rm --cached [fileName]
删除取消追踪仓库中的某个文件
如果想删除仓库和本地目录的文件git rm
7.git update-index --assume-unchanged file 不再追踪本地某文件,而不删除仓库中的文件
8.git revert commit 撤销某次提交
可以把他看成快照head与快照head-某次commit的合并,而且会出现奇怪的冲突。不是推荐做这样的事
9.git checkout file 撤销文件的修改
他会先从暂存区找file,如果找不到,在当前仓库找,找到了就用来替换工作区的文件,git checkout commit file 直接将commit的file替换工作区
git 分支操作命令
1.git branch testing
创建但不切换分支
这会在当前所在的提交节点上创建分支
2.git checkout testing
切换分支
git checkout -b testing
创建并切换分支,这个比较混淆,算作特殊用法。
git checkout -b testing origin/testing
从远程取得一个分支并在本地创建
3.查看分支
git branch
查看本地
git branch -r
查看远程分支
git branch -a
查看所有分支
4.删除分支
git branch -d testing
git branch -D testing
强制删除
git branch -r -d
删除远程分支
5.git merge master
合并分支
开分支后,必然会做一些改动,且必然要合并到主分支上。如果当前是testing分支,git merge master就会将merge合并到testing,merge有可能会出现冲突,需要手动解决冲突,然后commit。拉取远程分支时git pull也会做一次合并。解决冲突的工具有很多,使用vscode编辑器足以,方法很简单,打开冲突文件即可
git 远程仓库操作命令
1.git clone url
克隆远程仓库
2.git remote
查看远程仓库服务器
通常origin 是默认的远程服务器
git remote -v
,查看远程服务器url地址
3.添加和移除远程服务器
git remote add <远程服务器> <url地址>
git remote remove <远程服务器>
4.拉取远程最新代码
git fetch origin testing
仅拉取
git pull origin testing
拉取并合并,如果已经有追踪分支,origin可以省略
git pull origin master --allow-unrelated-histories
拉取忽略不相关
5.跟踪分支,本地和远程分支的联系
git checkout -b testing origin/testing
或是git clone
创建的分支自带了与远程的联系
git branch -vv
可以查看所有分支关联的远程分支
git push -u origin master
, git branch -u origin/testing
手动设置与远程分支建立联系,建立关系后,git push就可以直接推送到远程
6.git push
推送
git push [remote-name] 分支名
,等价于下面
git push [remote-name] 本地分支名:远程分支名
如果远程没有该分支,会在远程自动创建,但必须建立与远程的联系
注意: 如果本地分支的最新进度<= 远程分支,则远程将拒绝你的push,必须先pull(也就是先merge远程),才能push
7.删除远程分支
git push origin --delete testing
git branch -r -d testing
为了正常与远程对接,一般操作流程如下:
1.克隆远程
git clone url
2.与远程远离联系
如果远程创建了分支,要切换到那个分支git checkout -b tt origin/tt
如果本地创建了分支,要推送到远程(远程没有这个分支),git push [remote-name] 本地分支名:远程分支名
,然后要绑定远程分支,git branch -u origin/分支名
3.对于http形式的远程url,最好做一下面密码操作
如果远程是https连接的,每次都需要输入密码,为了避免这样,可以克隆时手动改写一下url如,http://用户名:密码@远程仓库httpsurl
,当然你也可以改写remote地址达到同样效果:git remote set-url http://用户名:密码@远程仓库httpsurl
。
保持工作目录干净:
使用git reset --hard 并不能完全保证当前工作目录的干净,比如你从远程合并了master分支,出现了冲突,没提交直接reset到合并之前的commit,reset之后发现多出来了好多未跟踪的文件或文件夹,为什么会有多出来的文件,因为你在当前commit上,而你之前合并没提交,所以远程的commit并未成功写入本地,也就是说远程追踪的有些文件还没在本地追踪,你reset的时候,本地仓库只管你追踪的文件,多出来不管,如果要完全恢复到该commit的状态,git clean就行了,它将移除未追踪的文件,git clean -df可以把目录一起删了,所以git reset 通常和git clean连用。
git图形界面软件推荐:
1.gitahead:三端都有,界面直观,而且非商业免费使用。更新勤快
2.gitup:仅mac端。
git 不完全教程的更多相关文章
- Git使用详细教程(一)
很久不发博客,最近有兴趣想写点东西,但 Live Writer 不支持从Word复制图片,疯狂吐槽下 Git使用详细教程(一) Git使用详细教程(二) 该教程主要是Git与IntelliJ IDEA ...
- 在Dropbox上搭建私有的Git仓库的教程
导读 Git版本控制系统需要一个服务器端,而GitHub上要想创建私有的Git服务器端仓库则触及到收费项目,于是这里我们利用Dropbox的免费空间,来看一下在Dropbox上搭建私有的Git仓库的教 ...
- git github 使用教程
参考文章:文章地址: http://wuyuans.com/2012/05/github-simple-tutorial/ github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般 ...
- git学习基础教程
分享一个git学习基础教程 http://pan.baidu.com/s/1o6ugkGE 具体在网盘里面的内容..需要的学习可以直接下.
- git 入门教程之 git 私服搭建教程
git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...
- Git&GitHub-基础教程
目录 1. Git简介 1.1 什么是版本控制系统? 1.2. Git的历史 1.3. 什么是分布式?什么是集中式? 2. Git安装 3. 创建一个版本库 4. Git的语法教程 4.1. 提交一个 ...
- 图解Windows下 GIT GUI 使用教程
https://jingyan.baidu.com/article/19020a0a7ae6af529c284248.html 本篇经验将和大家介绍Windows下 GIT GUI 使用教程,希望对大 ...
- Git 相关工具及教程地址
一.Git GUI 客户端 Git 客户端下载(Windows) TortoiseGit 客户端下载(Windows) Sourcetree 客户端下载(Windows.Mac) Git Extens ...
- FastAdmin 推荐 Git 在线学习教程
FastAdmin 推荐 Git 在线学习教程 因为 FastAdmin 推荐使用 Git 管理代码,有很多小伙伴对 Git 不是很熟悉. 也苦于找不到好的教程,我就分享一个 Git 在线学习教程. ...
- GIT GUI简易教程
GIT GUI简易教程 前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中 ...
随机推荐
- IOS开发 UITabBarController
UITabBarController使用详解 UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程 序,ipod程序等.UITabBarContro ...
- 网络装机pxe服务器的配置过程
网络装机pxe服务器的配置过程 背景: 针对于Linux运维工作中遇到的需要大批量安装Linux系统的情况,通过网络装机的方式实现无人值守安装Linux操作系统,现需要配置一台pxe服务器用于pxe批 ...
- 企业级应用,如何实现服务化三(dubbo入门案例)
今天是六一儿童节,从千里之外的广州,回到了贵州老家,真好!好山好水好心情,好了接着写点东西.这是企业级应用,如何实现服务化系列的第三篇.在上一篇:企业级应用,如何实现服务化二(dubbo架构)中,认识 ...
- IP服务-4-HSRP,VRRP和GLBP
HSRP(热备份路由器协议).VRRP(虚拟路由器冗余协议)和GLBP(网关负载均衡协议) 当主机只知道一个IP地址能够用来访问子网外部时,可能会出现一些问题,这些协议正好解决了这一隐患. HSRP允 ...
- 1047 - Best couple 好题~
http://www.ifrog.cc/acm/problem/1047 思路很简单,跑一发floyd,然后再用km. 但是问题来了,这个有可能n != m.那怎么办? 其实可以补上一些不存在的点.来 ...
- 20 个案例教你在 Java 8 中如何处理日期和时间?
前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Jav ...
- 将GitLab上面的代码克隆到本地
1.安装GitLab客户端 2.去GitLab服务端找项目路径 3.去GitLab客户端去克隆代码 右键-->git Clone 4.最后结果
- WCF中的AsyncPattern
WCF中的AsyncPattern (系列博文源自 http://pfelix.wordpress.com/,由笔者翻译并整理,转载请注明) 在wcf 的 service contract中, 服 ...
- kafka基础五
Kafka与Zookeeper Zookeeper存储了什么 kafka架构中角色: 1.producer: 消息生产者,发布消息到 kafka 集群的终端或服务. 2.broker: kafka 集 ...
- .NET Core 1.0 CentOS7 尝试(三、使用VSCode创建一个Web应用)
参考地址:https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html 一.使用VSCode创建一个目录FirstWebApp ...