git fetch 和 pull 的区别
工作区(working directory)--> 暂存区(staging)--> 本地仓库(local repository)--> 远程仓库副本 --> 远程仓库(remote repository)
简而言之:git pull = git fetch + git merge
使用 rebase 合并多个 commit
背景:开发中会产生很多临时commit,尤其是在修改commiter的检视意见,以及修改clean code的时候。为了避免多个commit信息让提交显得杂乱,也方便后续的查看。在提交MR前,建议整理合并一下这些commit。不必强求把所有commit合成一个,只要把临时commit合并,保留有特性的commit即可。
操作步骤:
1、在自己的分支上,先执行git log,发现有三个临时提交,commit1、commit2、commit3。
2、把commit 3,commit 2,commit 1合并成一个commit:(下面两种方式都可以)
》git rebase -i HEAD~3 // 表示从最新commit开始往后数3个commit。
》git rebase -i e29c25e45aee0028aa // 表示从(e29c25e45aee0028aa)这个commit之后的所有commit。
3、然后进入到编辑页面,如下所示:
pick a18a451 commit 1
pick a18a452 commit 2
pick a18a453 commit 3
操作方法:把需要保留的commit改成pick(默认就是pick),把需要合并的commit 改成s或者f。编辑完成后保存退出。
4、重新编辑commit信息: 上一步完成之后,会自动进入编辑commit信息流程,按照需要整理commit信息(默认全部显示),保存退出,再看一下git log,显示3个commit已经被合成一个了。
5、最后一步,推送到远端分支:
git push origin your_branch_name -f
done~
cherry-pick用法
单个commit 只需要 git cherry-pick commitid
多个commit 只需要 git cherry-pick commitid1..commitid100 // 即两个commit之间用两个.号连接。
注意,不包含第一个commitid , 即 git cherry-pick (commitid1..commitid100]
长期存储密码
git config --global credential.helper store
设置之后会提示重新输入用户名和密码。
git diff 总是先删后加的解决办法
说明:代码迁移的时候,使用了 F6 进行重构,但是经常会出现明明只改了包的路径,但是一提交代码就发现 +9999行 -9999行之类的。
原因:可能是迁移代码时,idea 帮忙格式化了代码,导致文件的换行符号发生了变化,但这个从表面上看不出来,只能通过 BC 工具进行比对才能看到。
$ git config --global --unset-all core.autocrlf
备注:2023年1月10日19:57:30,好像不行。