秒文镇楼
https://www.cnblogs.com/lfxiao/p/9378763.html
https://baijiahao.baidu.com/s?id=1627328817332384564&wfr=spider&for=pc (squash)
git 图形化界面来一个(vscode有插件)
目标
1、保证git tree提交顺序 (及时rebase master commit)
2、每次需求master只有一个commit(git squash合为一个)
结论
add commit pull (merge)方式,commit时间是正确的,add commit rebase方式,commit时间顺序是乱的,commit时间该是几点就是几点。
rebase master中commit 到本地,squash时候只是squash我commit的,master的不受影响。
正向
git add . git commit -m 'fix'
逆向
git reset HEAD^ 回退一步
HEAD~n 回退n步
reset参数
--mixed 默认 保留源码反向commit add
--soft 保留源码只反向commit add操作未反向
--hard 不保留源码
git pull origin master 引起的merge操作(commit+merge branch),算一步。
(commit代码,拉了下master代码,引入了其他commit)(一步reset操作即可去除红框内三个)
rebase
commit完,git rebase master,保证树形结构流畅。
master在1点拉代码到分支,一顿改和在1点半 commit,2点小明提交到master一些commit ,3点准备整理代码提交到master,rebase下,我这次提交的所有commit都会跑到小明的之后。1点半的commit会在小明提交的commit之后。
rebase操作后,master上所有已提交commit皆会拉到本地分支,保证git tree提交顺序(说了这么多,这才是最终目标)
git reset --hard ...误操作找回代码
git reflog,然后找到对应状态,git reset --hard ...
改了gitignore不生效
git rm -r --cached .
git add .
git commit -m 'update .gitignore'