learngit
比如说有一个readme.txt
git init -> 创建空仓库
git add readme.txt -> 添加文件到暂缓区
git commit -m “message” -> 将暂缓区的内容提交到当前分支(git自创master分支);" "中的信息就像是一种备注提示
git status -> 查看是否有修改状态
git diff -> 查看修改过的部分
git log -> 查看历史版本,也可添加–pretty=oneline使内容更直观
git reset hard commit_id -> 可以穿越回去到过去的版本,log也会被更新
git reflog ->可以看历史命令记录,再次可以看见版本号
git diff HEAD – readme.txt命令可以查看工作区和版本库里面最新版本的区别
git checkout – file -> 可以撤销在add之前的内容,其实就是将版本回到最近一次git add的样子
但当你已经git add的时候可以使用
git restore --staged file 来取消暂缓区的修改,然后再用git checkout – file来清除工作区
如果已经提交了不合适的修改到版本库时,想要撤销本次提交,就用git reset版本回退,不过前提是没有推送到远程库
删除文件:
先rm file
后git rm file
最后 git commit
HEAD就是最新版本
删除分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout 或者git switch
创建+切换分支:git checkout -b 或者git switch -c
合并某分支到当前分支:git merge
删除分支:git branch -d
当合并分支发生冲突时
可以git status来告诉我们冲突的文件
此时cat readme.txt可以直接查看readme.txt的内容,
Git会用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
修改之后提交
也可以使用git log --graph --pretty=oneline --abbrev-commit
修改之后删除feature1分支就可以了
分支策略
在合并时我们会偶尔使用fast-forward说明我们进入快速合并模式,但这种模式下,如果我们删除分支就会丢失分支信息,所以我们用–no-ff来强制退出快速模式转为普通模式,还会自动创建一个commit
当你已有一个dev分支和master分支的前提下,
Git merge --no-ff -m “add merge” dev
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
BUG分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop(这是回到工作区并删除stash;可以分为两步:git stash apply回到工作区、git stash drop删除stash),回到工作现场,此时用 git stash list就查看不到任何stash
信息了,你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0};
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
创建标签
- 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- 命令git tag -a -m "blablabla…"可以指定标签信息;
- 命令git tag可以查看所有标签。
操作标签
- 命令git push origin 可以推送一个本地标签;
- 命令git push origin --tags可以推送全部未推送过的本地标签;
- 命令git tag -d 可以删除一个本地标签;-d delete
- 命令git push origin :refs/tags/可以删除一个远程标签。
https://liaoxuefeng.gitee.io/resource.liaoxuefeng.com/git/git-cheat-sheet.pdf
:refs/tags/可以删除一个远程标签。