Git的使用笔记

      说来惭愧,虽然身为一个低端的android码农,但是我一直很害怕使用git,原因是进入工作后一直是一个人开发,刚开始接触git时,由于不知道什么是gitignore文件,导致将apk包提交推送上去了,也不知道为啥,后来一直就推送远端失败,结果我就一用硬盘保存我写的代码。再后来,新开了一个仓库,但是一个人也就随便用用 add ,commit和push这三个方法,直到今年的二月下旬,我终于忍不了了,下决心想学会git的命令。学完后,向众位大佬学习,写一篇文档,记录一下使用git的方方面面,以便于遗忘了进行查找。

      git的历史大家随便百度就能知道,过去不会的时候感觉为啥会有git这个东西,现在稍微会了一些,感觉确实方便了不少。下来我来记录我学到的和常用的命令。

      首先给大家推荐一个b站上的将git命令的课,这个课我觉得是讲的很详细的,我也是跟他学的,大家可以看看视频地址


   配置用户名和邮箱

git config --global user.name "用户名"         配置或修改用户名

git config --global user.emal "532886747@qq.com"  配置或修改邮箱

git config --list 查看配置项

git config user.name 查看用户名

git help 查看git帮助

git config --global --replace-all user.name “你的用户名” 修改你的用户名

git config --global --replace-all user.email “你的邮箱”  修改你的邮箱

其中,当输入--list的时候会发现git还停留在:这个状态,这个时候我们按回车键,会一直显示未显示的下一行,当出现(END)的时候我们按q就可以了,当然也可以直接按q,这样就退出了。

 管理git项目

git init  生成.git文件 ,被git管理

git init [name]  如果加上文件名 则是先创建一个文件名,然后在生成.git文件

git add [filename]  添加文件被追踪,添加到暂存区

git add .    添加所有文件被追踪,添加到暂存区

git status  查看文件的状态

git commit -m “描述”

git commit -am 相当于 add. + -m

每次commit的时候都会生成一个版本。

当时用git status 查看状态的时候,只要文件有被更新过或者新创建一个文件,那就会显示出来,如果文件没有被add .,就会显示untracked files 该文件未被追踪 。

当时用git add 后在查看状态,就会变成 文件就会变色

当被commit 后, 会显示 master(提交的分支) , root-coomit (第一次提交),0c5ae36(版本号),提交(提交时的说明)

1 file 一个文件被改动,1 insertion 一个文件被添加

commit -m “提交”

log追踪

git log 相当于你的提交日志

git log -p -2 最近两次提交内容的不同

git log --author 

git log --oneline 简化版的git log,只显示一行。

git log --graph 查看版本线图

git log --pretty=format 打印出格式化的日志

追踪文件修改前后的不同

git diff 查看文件和之前的修改的不同

git diff --staged 在stage状态查看修改的不同 (就是当git add .的时候)

当你需要对比和上一次提交代码之前修改代码不同的时候,可以用这两个命令来实现

文件忽略.gitignore

/node_modules  忽略node_modules文件夹下所有文件

*.log  忽略.log结尾的文件

&.zip 忽略.zip结尾的文件

git rm  -r -- cached. 把已追踪的文件忽略

撤销追踪操作  一键还原

git checkout -- [filename]         恢复到上一次的状态 就是切到上一步提交的版本

git reset HEAD [filename]        撤销当前文件的追踪

版本回退(慎用)

git reset --hard HEAD ^           回退到上一个版本

git reset --hard HEAD ^^         回退到上上一个版本

git reset --hard HEAD [hash号]        回退到指定hash的版本

git reflog  指针理解

回到旧版本(推荐)

git checkout [hash号] -- [filename]         将某一个文件切回到版本号

git checkout [hash好] -- .         将所有切回到这个版本

版本回退和回到版本的概念是不同的,如果是版本回退 :v1 -> v2 -> v3 ,如果我要回退到v2这个版本,那么v3这个版本就会被删掉。回到某个版本则不会删掉v3这个版本,而是v3的指针会指到v2,变成v1 -> v2 -> v3 -> v2。

建立切换分支删除分支(重点)

git branch [name]           创建一个分支,不加名字就是展示分支

git checkout [branch name]            切换分支

git checkout -b [branch name]          建立和切换同时进行

git branch [name] -d            删除一个分支

git branch [name] -D            强制删除分支

分支的作用就是当多人开发的时候,不影响生产分支的情况下 ,大家各自开发各自的,当需要合并的时候,再合并。

当你误删了分支怎么办?1.拿到被删分支的hash值。2.git branch [hash值] 分支就会回来了。这个方法我没试验过。 

分支的创建和切换非常重要,我之前就怕合并(原罪是自己too young),一定要练习熟练。

合并分支和冲突的解决(重点)

git merge [branch name]          讲name分支合并到目前所处的分支

git status         查看分支冲突的原因

git merge --abort         忽略合并

手动选择正确内容

git commit 

首先在dev-test的分支下修改了代码

dev-test分支

这时commit代码,在test分支下已经生成了一个版本

提交代码并生成分支

这时我切换分支到develop并在相同的位置写了这样的代码并提交。

develop分支

这时,我打算将develop分支上的内容合并到dev-test分支 于是有了以下的操作,当我打算合并的时候,git报错,分支冲突在myActivity这个类,翻译为(自动合并失败,修复冲突并提交结果)

合并分支发生冲突

在android studio中会显示出冲突的地方,HEAD到=代码 当前分支的内容 =到develop 代表develop分支(即你打算合并的分支)的内容,这个时候就可以取舍了,可以根据自己的需求删除或保留冲突的地方。(git status也可以查看出具体冲突的文件)

冲突的内容
我选择将两个都保留

接下来就是用git add. ,git commit 这两个方法 然后会出现以下情况,这时候你将冲突的描述写完后

添加描述,然后摁下ESC 输入:wq。最后回车,这样冲突就解决了。

总结:当合并分支发生冲突的时候,有两种解决方式:1.手动解决冲突,看哪些代码需要留下,哪些代码需要删除。这种方式的前提是你知道哪些代码需要合并。2.忽略合并,当前代码不知道哪些需要留下,哪些需要删掉的时候,就是用--abort方法。

通过命令查看版本线图

git log --graph

git log --oneline --graph    

git log --oneline --graph --all    查看所有分支下的线图

git log --oneline --graph -[number]    

快转机制的意义

快转实际就是当前master的将来时

git merge branchname --no-ff   

更多合并的方法

git merge --no-ff --no-commit [branchname]

git merge --squash [branchname]    不想在合并分支时体现你多次commit记录的话,就用这个方法

git reset --hard ORIG_HEAD          回退到源版本,也就是最初的版本

一次性删掉所有不想要的分支

git branch --merged i egrep -v "(^|maseter|develop)" | xargs git branch -d         括号里代表不想删的分支


今天先记录这么多,过两天补充跟远端有关的笔记。

补充一下 

如何合并分支中的部分提交 

1.首先查看需要合并的分支中提交的hash号

2.切换到主分支, 使用  git cherry-pick hash号 (这个hash号是分支中提交的hash号)

3.然后就ok了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,760评论 0 10
  • 原文地址主要用到的命令: git config user.name 设置用户名 git config user....
    AFinalStone阅读 465评论 0 2
  • 1. 安装 安装完成后,需要一步设置,在命令行中输入: git config --global user.name...
    kevenZheng阅读 320评论 0 0
  • 教程:Git教程 - 廖雪峰的官方网站 各系统安装git git init 把目录变为仓库git add rea...
    皮丘吉尔阅读 331评论 0 0
  • Git简介 Git是目前世界上最先进的分布式版本控制系统。 作用 创建版本库 1. 新建一个文件夹 ,通过git ...
    petite_chen阅读 189评论 0 0