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 的更多介绍 ...
随机推荐
- 解决使用xampp无法通过ip访问的问题
本地能通过127.0.0.1或者localhost访问,无法通过外网地址访问: win解决防火墙问题: 1.进入控制面板 -> 系统和安全 -> 2.window防火墙 - 允许其他程序通 ...
- Google的搜索API的Delphi封装
这个东西实现了已经有一段时间了,那个时候谷歌还没有退出中国内地呢!而现在呢,谷歌都退了有一些日子了!紧以此纪念一番! 话说谷歌API,我相信很多人应该都知道!不晓得在实际应用中,用的人多不多(我说的不 ...
- G. Repeat it
G. Repeat it time limit per test 2.0 s memory limit per test 64 MB input standard input output stand ...
- 2018年Android面试题含答案--适合中高级(下)(转)
这里是我整理出来的 面试题,答案我花了很久的时间.加上我自己的理解整理出来的,作者不易,请谅解.有答案的的:https://xiaozhuanlan.com/topic/6132940875 1. ...
- 073-PHP数组元素相加
<?php $arr1=array(1,2,3,4,'5','05',TRUE); //等价于 1+2+3+4+5+5+1=21 $arr2=array(1,2,'ABC',3,'hello', ...
- 072-PHP数组的交集和差集
<?php $arr1=array(1,3,4,5,34,78,99); //参加第一项竞赛的学生学号数组 $arr2=array(5,6,7,3,56,34,8,9); //参加第二项竞赛的学 ...
- 通过 spark.files 传入spark任务依赖的文件源码分析
版本:spak2.3 相关源码:org.apache.spark.SparkContext 在创建spark任务时候,往往会指定一些依赖文件,通常我们可以在spark-submit脚本使用--file ...
- 事件时间(event time)与水印(watermark)
事件时间和水印诞生的背景 在实际的流式计算中数据到来的顺序对计算结果的正确性有至关重要的影响 比如:某数据源中的某些数据由于某种原因(如:网络原因,外部存储自身原因)会有2秒的延时,也就是在实际时间的 ...
- Java中的package和Import关键字的作用
一.package关键的作用 1.包的概念 package翻译为包,本质上就是一个文件夹,通过包组织项目结构的过程,就是通过包对应的文件夹管理.java和.class文件的过程. 2.包的作用 通过包 ...
- junit基础学习之-参数初始化(5)
package swust.edu.cn.postdoctors.service.impl; import java.util.Arrays; import java.util.Collection; ...