写点什么

平时开发 Git 常用的小技巧

用户头像
zui.zhang
关注
发布于: 2020 年 08 月 18 日
平时开发Git常用的小技巧

git的基本操作流程

工作区(WORKING DIRECTORY): 直接编辑文件的地方,肉眼可见直接操作;

暂存区(STAGIN AREA):数据(快照)暂时存放的地方;

版本库(GIT DIRECTORT(RESPOSITORY)):存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程git仓库



git head 的理解

每次都会指向最新的提交:这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交

git常见的回滚场景

git checkout .

将本地编辑区的内容会滚,如果执行过git add . 则git checkout .回滚不再生效,需要调用 git reset 命令;同时git checkout branchXX 切换分支;

回滚一次分支合并:发现冲突太多,如何还原到之前版本;

git reset --hard xxxid 来还原到合并之前的状态

回滚一次git add .,撤销一次的本地提交

git reset HEAD 会滚当前最新的版本ID,此时相当于会滚add 操作

此时 git checkout . 就可以将所有的编辑会滚掉,如果具体想处理某一个文件,可以加上文件名;

回滚一次提交(本地&远程仓库)

git reset --hard e310e8773f9e3aa0c32a717dd93c5d18c6e81c60

git reset --hard FETCH_HEAD

git reset --hard 70a56a5 

回滚到上一次分支的内容

git reset HEAD~1 默认模式是混合模式 —mixed;HEAD~N 会滚到N次之前;

reset 的三个关键参数:soft & hard & mixed

1.Soft 会将回滚的内容保留在工作区目录 & 所有的在original HEAD和你重置到的那个commit之间的所有变更集都放在stage(index)区域中,你可以重新编辑,然后在提交;此时输入命令 git checkout . 不会回滚编辑区的代码;

2.Hard:会直接回滚到之前的head id对应的状态,提交的内容不会保存到工作区和暂存区:这是一个比较危险的动作,具有破坏性,数据因此可能会丢失

3.mixed:--mixed是reset的默认参数,也就是当你不指定任何参数时的参数。

它将重置HEAD到另外一个commit,并且重置index以便和HEAD相匹配,但是也到此为止。working copy不会被更改。所有该branch上从original HEAD(commit)到你重置到的那个commit之间的所有变更将作为local modifications保存在working area中,(被标示为local modification or untracked via git status),但是并未staged的状态,你可以重新检视然后再做修改和commit

此时输入命令 git checkout . 回滚

git revert

创建新的提交来撤消提交。这是撤消更改的安全方法,因为它没有机会重新编写提交历史记录。例如,下面的命令将计算出第二次提交到最后一次提交中包含的更改,创建一个新提交来撤消这些更改,并将新提交附加到现有项目中。



git rebase 如何做

https://baijiahao.baidu.com/s?id=1633418495146592435&wfr=spider&for=pc



1.变基:git rebase -i HEAD~3

命令会在你默认的编辑器中打开最近三次的commit历史,-i表示用交互式打开;编辑器中显示了最经三次的历史,三个pick comit哈希。修改这个文件,我们可以告诉git修改历史记录。当我们保存推出编辑器时,git将从其历史记录中删除所有这些提交,然后一次执行每一行。默认情况下,会使用(pick)每个提交,并将其添加到分支。现在我们使用fixup,修改将操作从"pick"修改为"fixup"并在我们想要"fixup",移动到"添加two"commit的前面



2.将几个提交合并成一个

先我们要将所有这些更改压都合并为一个commit,要实现这个目的,只需将每个"pick"操作更改为"squash",第一行除外,

优雅的利用git stash

git stash的作用是把工作区(必须是工作区中已经被git追踪到的文件)和索引中的内容暂时存到一个堆上。而且这个堆是和分支不相关的。切换分支后,依然可以看到并使用。

暂时不想提交的,可放入stash里,等切换分支之后,在pop出来!有时候自己在某一个分支开发功能,突然有个需求 需要在这个分支上单独开发,或者某一个小改动点需要提前提交到分支上,但是现有修改不想全部提交上去,这时候可以调用stash暂存起来,虽然平时用的不多,但是特定场景,还是很方便。

常用命令

(1)git stash save "save message"  : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

(2)git stash list  :查看stash了哪些存储

(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p

(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 

(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储

(8)git stash clear :删除所有缓存的stash

注意:没有在git 版本控制中的文件,是不能被git stash 存起来的,需要先执行下git add 加到git版本控制中,然后再git stash就可以了

git log & git reflog & git status

git log & git log 命令可以显示所有提交过的版本信息

git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

git log --pretty=oneline

git reflog --pretty=oneline

git fetch & git pull

pull = git fetch origin + git merge origin/master

Idea changList 功能

将本地文件,或者不同业务功能的修改分开提交,不提交的内容changeLis中,有些场景比较好用,比如本地一些修改,不想提交到生产环境的一些配置,只在本地修改调试用;

修改已提交记录的备注

git commit -a --amend

修改gitignore 文件,立马生效

git rm -r --cached .  //清除缓存

git add . //重新trace file

git commit -m "update .gitignore" //提交和注释

git push origin master //可选,如果需要同步到remote上的话

发布于: 2020 年 08 月 18 日阅读数: 70
用户头像

zui.zhang

关注

还未添加个人签名 2018.06.21 加入

还未添加个人简介

评论

发布
暂无评论
平时开发Git常用的小技巧