往仓库里面添加文件

将新的文件放到暂存区

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. html5移动端主流适配方案

    1.流式布局(百分比布局)    案例:京东移动端 优点:简单方便,只需要固定高度,宽度自适应: 缺点:大屏幕手机实际显示的不协调. 2.响应式布局 优点:可以节约成本,不用再做专门的web app网 ...

  2. Day 30:HTML和CSS在Java项目中常用语法

    framSet例子,其中的页面链接地址视情况而定,应为我还不知怎么弄当前文件下呢,例子主要在说明该标签如何使用 <!DOCTYPE html PUBLIC "-//W3C//DTD X ...

  3. Linux基础之防火墙

    Linux基础之防火墙 Iptables   最初认识iptables还是在安卓手机上玩tiny的时候知道的,什么扫地僧.Jume等防跳脚本都基于iptables原理,一直觉得iptables的命令很 ...

  4. 学习进度05(billbill长评爬取02)

    今天下雪了,是个看<白色相簿2>的好日子. 昨天我们获取所有长评url,今天要解析这些url获取更多的信息随便,点开一个,我们需要的数据有标题,时间,内容.点赞数和评论先不弄了. 解析js ...

  5. P1048 数字加密

    P1048 数字加密 转跳点:

  6. arduino 通过串口接收string,int类型数据

    串口接收string类型数据源码如下 String comdata = ""; void setup() {     Serial.begin(9600); }   void lo ...

  7. 【收藏】收集的各种Python爬虫、暗网爬虫、豆瓣爬虫、抖音爬虫 Github1万+星

    收集的各种Python爬虫.暗网爬虫.豆瓣爬虫  Github 1万+星 磁力搜索网站2020/01/07更新 https://www.cnblogs.com/cilisousuo/p/1209954 ...

  8. SQL 、LINQ日前比较

      using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; ...

  9. spring学习第7天(PCD以及切点表达式)

    1.PCD(PointCutDesigner) spring的aop只针对方法进行aop代理,而apectj联盟的aop比之更加强大,还可以针对字段等进行切面编程 1.1:execution,用的最多 ...

  10. Rancher第一款Kubernetes操作系统推出

    Rancher实验室推出了业界首款针对Kubernetes的轻量级操作系统k3OS.它具有极低的资源消耗,最小的操作和二级引导,极大地简化了低资源计算环境. Kubernetes操作,提高Kubern ...