git操作整理
- git log: 记录版本历史
- git reflog:记录操作历史
远程库
- git remote add
xxx 其中 是git对远程库的命名,origin是默认叫法。这个命名是本地对远程库的一个命名。 - git remote -v 查看远程库
- git remote rm
工作区、缓存区
- stage:缓存,add后缓存区和工作区文件一致,commit后缓存区清空,进入下一个版本
diff
- 工作区 ↔ 缓存区:git diff,当前修改对比上次add都有啥,git add后当前工作区的文件就不能通过git diff查到了
- 缓存区 ↔ 版本库(HEAD):git diff —cached 当前add的文件和上个版本的diff
- 工作区 ↔ 库(HEAD):git diff HEAD — filename
- 库 ↔ 库:git diff 243550a 24bc01b filename #较旧的id 较新的id
文件修改撤销
文件修改撤销(老版本git)
checkout —(撤销工作区修改)
- 不加—可能变成切换分支
- 文件回到最近一次git commit或git add时的状态。
- 修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态(git commit);
- 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态(git add)。
reset HEAD (撤销暂存区修改)
- 把暂存区的文件回退到工作区
- 再利用git checkout —就可以删除修改了
- 或者直接用git checkout HEAD
直接从HEAD恢复文件
文件修改撤销(新版本git)
- 撤销工作区的修改:git restore
- 撤销工作区和暂存区的修改,恢复到HEAD:git resotre —worktree
- 撤销暂存区的修改,前提是上次add后该文件未做其他修改:git restore —staged
- 从master同时恢复工作区和暂存区:git restore —source=HEAD —staged —worktree
版本控制
回退
- HEAD始终指向当前分支的最新commit,HEAD^ 上一个commit,HEAD~100 上一百个commit
- 若想reset更新的commit,需要知道版本号 git reset [版本号]
分支管理
- 分支的切换:HEAD一直指向当前分支最新commit,切换分支时,HEAD指向另一个分支
- git branch: list all branchs
- git branch <>: create branch
- git switch <> / git checkout <>:切换
- git switch -c <> / git checkout -b <>: 创建并切换
- git branch -d <>: 删除
- git merge
: 合并new branch到当前分支 - 无冲突:fast forward
- 有冲突:解决冲突,commit。git log —graph可以看分支合并图
- git rebase:把本地未push的分叉提交历史整理成直线
rebase 和 merge
分支管理策略
- fast forward:不会留下commit信息
- —no-ff:会留下commit信息,用法:git merge —no-ff -m “merge with no-ff” dev
工作现场保护&Bug分支
https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
- 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
- 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
- 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
多人协作
- 试图用git push origin
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch —set-upstream-to=origin/
- git push origin
或者:
- git push -u
,其中u为upstream。git push -u origin branch:把本地branch分支push到origin/branch - git push —set-upstream