3.GIT常用命令
往仓库里面添加文件
将新的文件放到暂存区
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 后边什么都不接,默认比较工作区和暂存取的差异。
如果已经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常用命令的更多相关文章
- git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- Git 常用命令详解
Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...
- Git 常用命令大全
Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...
- Git常用命令总结
Git常用命令总结 git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone ...
- GIT常用命令备忘
Git配置 git config --global user.name "storm" git config --global user.email "stormzhan ...
- Git 常用命令2
Git 常用命令 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ gi ...
- git常用命令-基本操作
git常用命令-基本操作 1) 新增文件 新增了Test_1.java git add Test_1.java git commit –m “新增了Test_1.java” git push ...
- 转收藏:Git常用命令速查表
一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...
- git常用命令,git版本控制和Xcode结合使用,用Xcode提交到github,github客户端使用
1.git常用命令 查看命令: 1.git --help 查看git所有命令 2.git clone -help 查看git clone命令的细节 3.git config -l 查看当前所有配置 ...
- Git 常用命令详解(二)
Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...
随机推荐
- CentOS7 防火墙设置
CentOS7 防火墙命令 最近在公司服务器上安装了oracle12c数据库,在用数据库客户端连接的时候,连接不了.最后查找资料的原因是因为oracle的服务端口未开放. 首先还是还是输入以往的开启某 ...
- JavaScript的调用
1 方法调用模式 var myObject = { value : 0, increment : function(inc) { alert('hi'); } }; myObject.incremen ...
- parameterType和resultType
在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出, ...
- 一文详解scala泛型及类型限定
今天知识星球球友,微信问浪尖了一个spark源码阅读中的类型限定问题.这个在spark源码很多处出现,所以今天浪尖就整理一下scala类型限定的内容.希望对大家有帮助. scala类型参数要点 1. ...
- poj3405 Corporate Identity
和上一个1226一样吧,这个还不用翻转 然而本蒟蒻还是写不对,WA一片天,不知道自己搞什么,自从去了长沙感觉就是坑啊 while(1) iq--; /*#include <cstdio> ...
- 报错盲注之exp注入(double数值类型溢出原理详解)
首先感谢原文博主,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5509124.html Exp()为以 e 为底的对数函数:MySQL版本在 5. ...
- RDD转为Dataset如何指定schema?
与RDD进行互操作 Spark SQL支持两种不同方法将现有RDD转换为Datasets.第一种方法使用反射来推断包含特定类型对象的RDD的schema.这种基于反射的方法会导致更简洁的代码,并且在编 ...
- 【Vue中的坑】路由相同参数不同无法触发路由
场景: vue实现导航栏,二级导航栏跳转到相同页面,通过参数来实现到该页面后,根据参数来滚动到对应到位置 网上的解决方法: 通常情况下我们喜欢设置keepAlive 包裹 router-view &l ...
- 微信小程序 -- 自定义抽屉式菜单(底部,从下向上拉出)
实现一个抽屉菜单的案例 wxml <!--button--> <view class="btn" bindtap="powerDrawer" ...
- C++基础--引用的一点补充
这一篇是对引用的一点补充,内容基本上是来自<C++ primer plus>一书第八章的内容. 前面一篇介绍了引用的一点特点,这里补充一个,将引用用于类对象的时候,有一个体现继承的特征,就 ...