往仓库里面添加文件

将新的文件放到暂存区

git add 文件名(多个文件用空格分隔)

git commit -m '说明内容'

git commit --amend 此修改一般用于未push之前修改commit信息

网页路径:file:///Users/jinhailan/git_study/git_learning/index.html

git add -u 将当前git管理的所有文件更改的文件都提交到暂存区

git日志查看

• git log --all 查看所有分支的历史
• git log --all --graph 查看图形化的 log 地址
• git log --oneline 查看单行的简洁历史。
• git log --oneline -n4 查看最近的四条简洁历史。
• git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。
• git help --web log 跳转到git log 的帮助文档网页

git分离头指针的问题

HEAD不仅可以指向分支,还可以指向某一个commit

有时候写代码的时候可能会出现随意checkout 到某个分支的情况(其实这时候已经不属于任何分支)

git checkout 396bf9598b  比如这种情况

将会提示

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 396bf95 add styles.css

  

这种情况比较危险,当进行了这种头指针分离的操作后,你当前所所得更将不再于代码中的任何一个分支挂钩,如果你切换回某一个分支,那么你在头指针分离后的哪些操作在git眼里都是可以清掉的垃圾,所以如果以后还需要这种变更,最好为这个分离的头指针创建一个分支

➜  styles git:(396bf95) vim style.css
➜ styles git:(396bf95) ✗ git status
HEAD detached at 396bf95 这是提示head 没有指向任何分支,已经跟分支分离了
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: style.css no changes added to commit (use "git add" and/or "git commit -a")

  

➜  styles git:(396bf95) ✗  git commit -am 'backgroud to green'
commit f85172276bfc0ad2a942afe820ea7f5351ac3183 (HEAD -> master, tag: rename, te[detached HEAD d0ffc33] backgroud to green

 

➜  styles git:(d0ffc33) git checkout master //如果此时,你需要切换到master分支上修改bug,会有以下提示
Warning: you are leaving 1 commit behind, not connected to
any of your branches: d0ffc33 backgroud to green If you want to keep it by creating a new branch, this may be a good time
to do so with: //注意该提示,建议你为这个分离的head创建一个分支 git branch <new-branch-name> d0ffc33 //创建分支的命令 Switched to branch 'master'
➜  styles git:(master) git branch fix_css d0ffc33 //按照提示查创建好分支,然后通过gitk --all命令可以从图形化界面看到已经创建了对应的分支fix_css

  

GIT  HEAD 与branch的关系

HEAD指向的就是branch 实际上最终指向的就是commit

可以通过git cat-file -t 来查看

git HEAD其他用法

可以比较当前head指向的commit和之前的commit的不同

git  diff  HEAD HEAD~1     比较本次commit和上次commit的区别

git diff  HEAD HEAD~1~1 比较本次和上上次commit的区别

1 一个节点,可以包含多个子节点(checkout 出多个分支)
2 一个节点可以有多个父节点(多个分支合并)
3 ^是~都是父节点,区别是跟随数字时候,^2 是第二个父节点,而~2是父节点的父节点
4 ^和~可以组合使用,例如 HEAD~2^2

删除没用的分支

git branch -d 分支

如果出现告警,如果我们可以控制这个风险,确实要删除,那么可以使用-D来删除

➜  git_learning git:(master) git branch -d fix_readme
error: The branch 'fix_readme' is not fully merged.
If you are sure you want to delete it, run 'git branch -D fix_readme'.

  

git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge的其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除。

GIT变基操作

尚未提交到远端服务器的commit,是可以rebase的。

git rebase -i 需要变更的前一个序列值。

git rebase工作的过程中,就是用了分离头指针。rebase意味着基于新base的commit来变更部分commits。它处理的时候,把HEAD指向base的commit,此时如果该commit没有对应branch,就处于分离头指针的状态,然后重新一个一个生成新的commit,当rebase创建完最后一个commit后,结束分离头状态,Git让变完基的分支名指向HEAD

整合几个连续的commit 内容

操作完第一步以后,后悔了不想continue了该如何操作

git rebase --abort

用法:要把第一次和做后一次跟readme有关的commit合并到一起

MacBook-Pro-de-jinhailan:git_learning jinhailan$ git log
commit fc6bd589f3ff96467b65237ab523d02e992906ab (HEAD -> master)
Author: jinhailan_local <jinhailan1234@163.com>
Date: Mon Jan 7 15:40:02 2019 +0800 readme readme.md commit 95860d1c62f4b137be4681affea710a85e07e3a1
Author: jinhailan_local <jinhailan1234@163.com>
Date: Mon Jan 7 15:03:56 2019 +0800 create a complete web page
add index + logo add styles.css add a js modify index style commit 50447b720a9a19609286187a7abba57c5dd1dded
Author: jinhailan_local <jinhailan1234@163.com>
Date: Mon Jan 7 14:57:02 2019 +0800

  git  rebase -i 50447b7

pick 50447b7  add reademe  将第一次的commit pick出来
s fc6bd58 要合并的 commit
pick c7e25bd create a complete web page add index + logo # Rebase 50447b7..c7e25bd onto 50447b7 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
#
# Note that empty commits are commented out
~

  如果此时没有弹出第二个文件,可以按照提示执行git rebase --continue

继续修改文件添加 add readme.md 内容

暂存区和HEAD如何做比较

这个比较是指我将我的变更做了add操作,然后我现在想要commit,但是我想跟我当前分支上最近一次commit的内容做一下比较,看我做了什么变更的时候使用。

git diff --cache

➜  git_learning git:(master) ✗ git diff --cached
Hi,we are learning Git together.
Have a good time!
one
b
c
d
jinhailan 在readme文件末尾加上jinhailan ➜ git_learning git:(master) ✗ git add readme 添加到暂存取
➜ git_learning git:(master) ✗ git status 查看当前状态,显示修改了一个文件
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) modified: readme ➜ git_learning git:(master) ✗ git diff --cached 对比当前暂存区和HEAD的区别,也就是当前暂群区和head指向的那一次commit的区别
diff --git a/readme b/readme
index 9b1b5bc..5c00e87 100644
--- a/readme
+++ b/readme
@@ -5,3 +5,4 @@ one
b
c
d
+jinhailan

  

工作区和暂存区快照如何比较差异

git diff  后边什么都不接,默认比较工作区和暂存取的差异。

此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
也就是修改之后还没有暂存起来的变化内容。

如果已经git add 添加到暂存区,就不会显示变化了

https://www.cnblogs.com/lsgxeva/p/8540485.html

不想保留暂存区里面的所有内容

场景:我放到暂存区很多文件了,git add 放到暂存取后,我都不想要了,想撤回到工区,恢复到跟HEAD一样

git reset HEAD  后面不接任何参数

就会把之前git add 的内容都放回工作区

恢复暂存区里面的部分内容

git  reset HEAD -- 文件名  (-- 和文件名之间有空格,也可以添加多个文件,用空格分隔)

正确删除不需要的文件

普通方法

rm 文件

git rm file_name  将删除操作放到了暂存区

git中可以直接删除文件并将变化放到暂存区

git rm file_name

3.GIT常用命令的更多相关文章

  1. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  2. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  3. Git 常用命令大全

    Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...

  4. Git常用命令总结

    Git常用命令总结 git init      在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.   git clone ...

  5. GIT常用命令备忘

    Git配置 git config --global user.name "storm" git config --global user.email "stormzhan ...

  6. Git 常用命令2

    Git 常用命令 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ gi ...

  7. git常用命令-基本操作

    git常用命令-基本操作 1)      新增文件 新增了Test_1.java git add Test_1.java git commit –m “新增了Test_1.java” git push ...

  8. 转收藏:Git常用命令速查表

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  9. git常用命令,git版本控制和Xcode结合使用,用Xcode提交到github,github客户端使用

    1.git常用命令 查看命令: 1.git --help 查看git所有命令 2.git clone -help 查看git clone命令的细节 3.git config -l   查看当前所有配置 ...

  10. Git 常用命令详解(二)

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

随机推荐

  1. 从0到1完成微信小程序开发(2)

    一,小程序的文件结构 小程序包含一个描述程序的app和多个描述各自页面的page 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 一个小程序页面由四个文件组成,分别是: 下面是一个单页 ...

  2. 剑指offer_2.3_Day_6

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 public class Solution { public int Fibo ...

  3. 【iOS】Swift4.0 GCD的使用笔记

    https://www.jianshu.com/p/47e45367e524 前言 在Swift4.0版本中GCD的常用方法还是有比较大的改动,这里做个简单的整理汇总. GCD的队列 队列是一种遵循先 ...

  4. 八、React实战:可交互待办事务表(表单使用、数据的本地缓存local srtorage、生命同期函数(页面加载就会执行函数名固定为componentDidMount()))

    一.项目功能概述 示例网址:http://www.todolist.cn/ 功能: 输入待做事项,回车,把任务添加到 [正在进行] [正在进行] 任务,勾选之后,变成已[经完成事项] [已完成事务], ...

  5. MacOS通过ssh连接基于Virtualbox的Ubuntu虚拟机

    以前总是用Windows软件putty进行ssh连接,今天尝试使用macos. 实验环境:主机:macos 10.15.3 客户机:Ubuntu 18.04 默认情况下,Ubuntu没有安装SSH,需 ...

  6. POJ 2632:Crashing Robots

    Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8424   Accepted: 3648 D ...

  7. 官网英文版学习——RabbitMQ学习笔记(一)认识RabbitMQ

    鉴于目前中文的RabbitMQ教程很缺,本博主虽然买了一本rabbitMQ的书,遗憾的是该书的代码用的不是java语言,看起来也有些不爽,且网友们不同人学习所写不同,本博主看的有些地方不太理想,为此本 ...

  8. PHP - 验证码制作加验证

    一,主页 index.php   <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. 在开发过程中遇到的Oracle的坑及开发技巧

    本人与2018年毕业,工作一年多,仍是菜鸟,自毕业以来一直从事java软件开发工作,工作中大部分数据库都是使用的Oracle,碰到的问题总结一下(随时更新). 1.sql中使用group by 分组时 ...

  10. Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)

    (本文代码已升级至Swift4) 有时我们需要从系统相册中选择视频录像,来进行编辑或者上传操作,这时使用 UIImagePickerController 就可以实现. 默认情况下,UIImagePic ...