Git配置与使用总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/crazy1235/article/details/78358448

基本配置

用户信息查看&配置

用户名和邮箱地址的作用:

  1. 每次commit都会用用户名和邮箱来记录

  2. contributions是通过邮箱来记录的


查看用户名

git config user.name

修改用户名

git config user.name xxx

修改git全局用户的用户名

git config --global user.name xxx

查看用户邮箱

git config user.email

修改用户邮箱

git config user.email xxx

修改git全局用户的邮箱

git config --global user.email xxx

Git命令别名设置

可以对常用的一些git命令设置别名:

git config --global alias.br branch // git br
git config --global alias.sta status // git sta
git config --global alias.reflog rlog // git rlog

工作区 & 暂存区

把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个 master 分支,所以,现在,git commit 就是往 master 分支上提交更改。

通过 git add 是把提交的修改从工作区放到了暂存区
通过 git commit 就是把修改从暂存区提交到分支上去


AS中文件颜色标识说明

  • 被修改的文件默认用 红色 标识!

  • 被添加到缓存区的文件,也就是通过git add命令操作过的文件,用 绿色 标识)

  • 已经被commit到分支上,或者没有被修改过的文件,用 黑色 标识


git log (查看操作日志)

git log

有可能 log 很多,一次显示不全,可以通过回车键继续显示下面的log。

不想继续往下看请按 q 键

git log --pretty=oneline

这里写图片描述

git log -p -x // 显示最近的x条记录,注意x表示数字,前面有一个‘-’
git log --stat // 简略显示每次提交的更改

还可以组合使用:

git log --stat -p -3 // 简略显示最近三条记录

通过 git reset 命令操作之后,再次通过git log显示操作记录的之后,会相应的不显示“移除的”记录。

git reflog

用来记录每一次操作


Git 中用 HEAD 表示当前版本。
上一个版本用 HEAD^ 表示。
上上一个版本用 HEAD^^ 表示。

……

上100个版本用 HEAD~100 表示。

Git允许我们在版本的历史之间穿梭,使用命令 git reset –hard commit_id

穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。


- -no-ff

ff fast-forward 的意思。

默认情况下,调用git merge xxx 是 ff 模式!

--no-ff //禁止fast-forward模式

通过- -no-ff模式merge分支之后,可以通过下面命令

git log --graph 

可以很明显的看书哪些是从feature分支合并来的。相比 ff模式merge分支则看不到这些内容。


git status 命令

通过 git status 来查看工作区的状态

本地库与远程库保持一致时:

(工作区域是clean的,然后说 当前branch 已经同步到 origin/master 这个远程分支了)

没有文件修改修改或者文件创建,但有 commitpush 时:

(这里就说,当前branch 比 origin/master 超前 6个commit)


当只有文件修改时:

控制台中直接提示了可以通过 git checkout - - xxx 来丢弃工作区中改文件的修改

也可以通过 git add xxx 来更新即将要提交的更改。


新增文件时

如果在AS中新增一个文件,会弹出框来提升你是否添加到git管理,如果选yes,则相当于调用了 git add xxx 这个命令,如果选no,则仅仅是在工作区新创建了一个文件。

这里写图片描述

下图就是选择no,没有添加到git管理中,可以看出这个文件记录是用红色标识的。

这里写图片描述

如果选择yes将新增的文件添加到git管理中,也就是添加暂存区中,则会用绿色进行标识。

这里写图片描述

文件修改和创建通过 git status 看的很清楚。分别用 modified: new file: 来标识~


提交记录 & 撤销记录

git add .     // 添加所有做修改的文件(包括新创建的文件)
git add xxx   // 制定某个文件进行添加

这里写图片描述

add 操作之后,红色标识的文件都会标称绿色。

git commit -m 'xxx'  // 把修改从暂存区提交到分支上

这里写图片描述

提示中说,当前分支比 origin/master (远程主分支) 早7个提交。


git branch操作

查看&切换分支

git branch // 查看本地所有分支
git branch -r // 查看所有远程分支
git branch -a // 查看所有分支(本地+远程)
git checkout xxx // 切换到xxx分支

这里写图片描述 这里写图片描述


创建分支

git branch xxx ###  // ### 可以不写,不写时表示从当前分支创建出一个新的分支xxx
                    // 写上###表示从###分支创建出一个新的分支
                    // ###也可以是commit id,表示从某一个commit节点创建分支xxx
git checkout -b xxx // 创建xxx分支并切换到xxx分支

这里写图片描述


分支删除

git branch -d xxx  // 删除xxx分支

这里写图片描述

git branch -D xxx // 删除xxx分支

分支删除之后恢复

加入你不下心误删了一个branch,怎么办呢?

当然是有办法恢复的!且往下看!


分支重命名

git branch -m old_branch_name  new_branch_name  // 先输入分支的旧名称,在输入分支的新名称

推送分支

git push origin xxx // xxx是分支名称

git add 操作

添加修改到暂存区

git add .  // 添加所有文件的修改

git add xxx // 添加具体某些文件的修改

接着就可以调用 git commit 命令来将修改添加到暂存区。


撤销 add操作

假如已经调用了git add 操作,怎么撤销呢?

git reset HEAD .  // 撤销所有已经add的文件
git reset HEAD xxx  // 撤销某个已经add的文件

这里写图片描述


撤销文件的修改(丢弃工作区中文件的修改)

当对文件进行修改之后,通过git status 命令会看到你所修改的文件,还会提示你可以通过 git add / git checkout – xxx 这两个命令进行操作。

  • git add 就是添加工作区的修改

  • git checkout - - xxx 就是废弃工作区的修改

这里写图片描述

git checkout -- xxx // 撤销工作区对xxx文件的修改

git commit 操作

提交一次修改

git commit -m 'xxx' // 提交一个修改,xxx是来描述修改的

撤销一次commit

假如你想撤回上一次commit的修改,怎么办呢?

git reset HEAD^ // 撤销上一个commit记录

https://segmentfault.com/q/1010000000430426


压缩多个commit


查看一个commit具体修改的内容

// 首先通过git log 命令找到对应的commit节点ID
// 然后通过git show xxx 命令进行查看

git show commit_id  // 查看某一commit都做了哪些修改
git show commit_id file_name  // 查看某个commit中某个文件做了什么修改

修改上次提交的内容

当你调用 git add xxx 了,然后调用 git commit -m ‘xxx’ 之后,发现漏掉了几个文件没有add commit,此时可以而通过 * git commit – amend* 命令把这几个漏掉的文件修改补进去(补到上一个commit中)。

git add xxxx
git commit -m 'xxx'
git add xxx
git commit --amend  // 调用了此命令,后面add进来的文件就会补到上一个commit项中。还可以修改commit的备注信息

修改最后一次commit的用户名和邮箱

方法一:通过amend命令修改

git config (--global) user.name xxx // 修改用户名
git config (--global) user.email xxx  // 修改邮箱

git commit --amend --reset-author // 修改最后一次的用户信息

方法二:通过reset命令撤回commit,然后修改了信息重新commit


git merge


git rebase

衍合

git rebase [主分支] [特性分支] // 先取出特性分支,然后在主分支上重演

一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。


多分支管理

(图片转自网路,侵删)


一般分分支的方式

  • master分支:主分支,线上稳定版本。

  • develop分支:日常开发分支。

  • feature分支:就具体的功能分支,与develop分支交互。

  • bugfix分支:bug修复分支。从develop分支切出来,修复了之后合并到develop分支上,然后删除该分支。

  • release分支:功能分支开发完毕的合并分支,也是即将发版的测试分支。从各个develop分支上fork出来的。等到针对release分支测试完毕之后,再将release分支合并到master分支去发布。

  • hotfix分支:线上版本修复分支。


多分支协作开发流程

// 从master切出来develop开发分支
git checkout -b develop master

// 员工A从develop分支上切出来一个工作分支来进行开发
git checkout -b feature_A develop
git add xxx
git commit -m 'xxx'
git push origin develop

// 员工B也从develop分支上切出自己的工作分支
git checkout -b feature_B develop
git add xxx
git commit -m 'xxx'
git push origin develop

// 合并各个feature分支到develop
git checkout develop
git merge --no-ff feature_A
git merge --no-ff feature_B

// 从develop分支切出来release打包测试
git checkout -b release-1.2 develop

// 开始对release分支进行测试,如果出现问题则切出bugfix分支修复
git checkout -b bugfix-1.2.1 develop
git commit -a -m 'xxxbug修复'
git checkout develop
git merge --no-ff bugfix-1.2.1
git branch -d bugfix-1.2.1

// 再次切出release分支进行测试
git checkout -b release-1.2.1 develop

// 测试完毕之后,合并到master分支
git checkout master
git merge --no-ff release-1.2.1

// 最后可以删除release分支
git branch -d release-1.2.1


// 如果线上版本发生了bug,需要紧急修复,写需切除hotfix分支来修复
git checkout -b hotfix-1.2.1 master
// bug修复了之后
git commit -a -m '修复了xxxbug'

// bug fix之后,hotfix需要merge到master
git checkout master
git merge --no-ff hotfix-1.2.1

// hotfix 同样需要merge到develop分支
git checkout develop
git merge --no-ff hotfix-1.2.1

// 删除hotfix分支
git branch -d hotfix-1.2.1



.gitignore文件配置

语法规则

  • # 表示注释

  • * 表示任意多个字符, 比如 *.iml 会忽略所有目录下的扩展名为iml的文件

  • ? 表示一个字符

  • [abc] 表示可选字符范围

  • 忽略某个文件或者文件夹,比如 !xx/*.iml 表示不忽略xx文件夹下扩展名为iml的文件

  • /xxx 忽略当前目录下的xxx文件,不对其他子目录下的xxx文件有影响

  • xxx/ 忽略xxx目录下所有的文件

  • .gitignore 文件可以忽略自己。只会对未track的文件有效,对已经加入版本库的文件无效。


忽略已经被提交的文件


Git-中-Reset、Revert、Checkout的区别

请参考:
https://yhhwpp.github.io/2016/10/31/Git-%E4%B8%AD-Reset%E3%80%81Revert%E3%80%81Checkout%E7%9A%84%E5%8C%BA%E5%88%AB/


问题处理

commit your changes or stash them before you can merge

出现这个问题是由于,某些文件在远程版本库和本地都做了修改,直接pull会出问题,所以提示你需要stash本地库的修改。

有三种方式:

    1. commit本地修改到暂存区,这样就可以pull下来远程库的内容了。
    1. 通过stash命令缓存起来修改的内容,并将本地库还原到上次提交的内容。等pull下来之后,在把缓存起来的的修改还原过来!
git stash
git pull
git stash pop
    1. 放弃本地的修改,直接pull远程库
git reset --hard
git pull

通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。

  • git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

  • git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

  • git stash list : 查看git栈中的所有备份

  • git stash clear:清除git栈中的备份


冲突处理

"<<<<<<<"   // 表示冲突代码开始

"======="   // 表示两个分支冲突代码的分隔符

">>>>>>>"   // 表示冲突代码结束

参考

猜你喜欢

转载自blog.csdn.net/crazy1235/article/details/78358448