概念

  • 工作目录:当前所见,Working directory
  • 暂存区域:以后要提交到仓库的文件,称为Index或者staging area
  • Git 仓库:持久化存储快照的地方,HEAD指针所指向的地方

Git 基本工作流程:

  1. 修改文件,会被git觉察
  2. 手动选择修改过的文件以暂存文件。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 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 mastergit 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 不完全教程的更多相关文章

  1. Git使用详细教程(一)

    很久不发博客,最近有兴趣想写点东西,但 Live Writer 不支持从Word复制图片,疯狂吐槽下 Git使用详细教程(一) Git使用详细教程(二) 该教程主要是Git与IntelliJ IDEA ...

  2. 在Dropbox上搭建私有的Git仓库的教程

    导读 Git版本控制系统需要一个服务器端,而GitHub上要想创建私有的Git服务器端仓库则触及到收费项目,于是这里我们利用Dropbox的免费空间,来看一下在Dropbox上搭建私有的Git仓库的教 ...

  3. git github 使用教程

    参考文章:文章地址: http://wuyuans.com/2012/05/github-simple-tutorial/ github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般 ...

  4. git学习基础教程

    分享一个git学习基础教程 http://pan.baidu.com/s/1o6ugkGE 具体在网盘里面的内容..需要的学习可以直接下.

  5. git 入门教程之 git 私服搭建教程

    git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...

  6. Git&GitHub-基础教程

    目录 1. Git简介 1.1 什么是版本控制系统? 1.2. Git的历史 1.3. 什么是分布式?什么是集中式? 2. Git安装 3. 创建一个版本库 4. Git的语法教程 4.1. 提交一个 ...

  7. 图解Windows下 GIT GUI 使用教程

    https://jingyan.baidu.com/article/19020a0a7ae6af529c284248.html 本篇经验将和大家介绍Windows下 GIT GUI 使用教程,希望对大 ...

  8. Git 相关工具及教程地址

    一.Git GUI 客户端 Git 客户端下载(Windows) TortoiseGit 客户端下载(Windows) Sourcetree 客户端下载(Windows.Mac) Git Extens ...

  9. FastAdmin 推荐 Git 在线学习教程

    FastAdmin 推荐 Git 在线学习教程 因为 FastAdmin 推荐使用 Git 管理代码,有很多小伙伴对 Git 不是很熟悉. 也苦于找不到好的教程,我就分享一个 Git 在线学习教程. ...

  10. GIT GUI简易教程

    GIT GUI简易教程 前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中 ...

随机推荐

  1. IOS开发 UITabBarController

    UITabBarController使用详解 UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程 序,ipod程序等.UITabBarContro ...

  2. 网络装机pxe服务器的配置过程

    网络装机pxe服务器的配置过程 背景: 针对于Linux运维工作中遇到的需要大批量安装Linux系统的情况,通过网络装机的方式实现无人值守安装Linux操作系统,现需要配置一台pxe服务器用于pxe批 ...

  3. 企业级应用,如何实现服务化三(dubbo入门案例)

    今天是六一儿童节,从千里之外的广州,回到了贵州老家,真好!好山好水好心情,好了接着写点东西.这是企业级应用,如何实现服务化系列的第三篇.在上一篇:企业级应用,如何实现服务化二(dubbo架构)中,认识 ...

  4. IP服务-4-HSRP,VRRP和GLBP

    HSRP(热备份路由器协议).VRRP(虚拟路由器冗余协议)和GLBP(网关负载均衡协议) 当主机只知道一个IP地址能够用来访问子网外部时,可能会出现一些问题,这些协议正好解决了这一隐患. HSRP允 ...

  5. 1047 - Best couple 好题~

    http://www.ifrog.cc/acm/problem/1047 思路很简单,跑一发floyd,然后再用km. 但是问题来了,这个有可能n != m.那怎么办? 其实可以补上一些不存在的点.来 ...

  6. 20 个案例教你在 Java 8 中如何处理日期和时间?

    前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Jav ...

  7. 将GitLab上面的代码克隆到本地

    1.安装GitLab客户端 2.去GitLab服务端找项目路径 3.去GitLab客户端去克隆代码 右键-->git Clone 4.最后结果

  8. WCF中的AsyncPattern

    WCF中的AsyncPattern   (系列博文源自 http://pfelix.wordpress.com/,由笔者翻译并整理,转载请注明) 在wcf 的 service contract中, 服 ...

  9. kafka基础五

    Kafka与Zookeeper Zookeeper存储了什么 kafka架构中角色: 1.producer: 消息生产者,发布消息到 kafka 集群的终端或服务. 2.broker: kafka 集 ...

  10. .NET Core 1.0 CentOS7 尝试(三、使用VSCode创建一个Web应用)

    参考地址:https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html 一.使用VSCode创建一个目录FirstWebApp ...