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 "[email protected]"  配置或修改邮箱

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了

你可能感兴趣的:(Git的使用笔记)