基本配置
用户信息查看&配置
用户名和邮箱地址的作用:
每次commit都会用用户名和邮箱来记录
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 这个远程分支了)
没有文件修改修改或者文件创建,但有 commit 未 push 时:
(这里就说,当前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的区别
问题处理
commit your changes or stash them before you can merge
出现这个问题是由于,某些文件在远程版本库和本地都做了修改,直接pull会出问题,所以提示你需要stash本地库的修改。
有三种方式:
-
- commit本地修改到暂存区,这样就可以pull下来远程库的内容了。
-
- 通过stash命令缓存起来修改的内容,并将本地库还原到上次提交的内容。等pull下来之后,在把缓存起来的的修改还原过来!
git stash
git pull
git stash pop
-
- 放弃本地的修改,直接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栈中的备份
冲突处理
"<<<<<<<" // 表示冲突代码开始
"=======" // 表示两个分支冲突代码的分隔符
">>>>>>>" // 表示冲突代码结束