Git
Git
打标签
当前commit创建标签
git tag -a v0.1 -m "my first tag"
根据历史commit打
git tag -a v0.2 commitid
检查标签
git show v0.1会跳转到对应的commit
列出标签
|
|
推送到远程
git push origin –tags推送所有标签 git push origin v0.1推送指定版本标签
git pull && git fetch
git fetch用来检索元数据更新而不更新实际文件 git pull除了做那个还会把远程文件修改更新到本地
git常见命令cheat sheets
copied from gitlab gitlab docs
git configuration
命令片段 | 说明 |
---|---|
git config –global user.name "Your Name" | 全局设置用户名 |
git config –global user.mail "Your Mail" | 全局设置邮件 |
git config –global color.ui auto | 全局设置ui |
starting a project
命令片段 | 说明 |
---|---|
git init [project name] | 初始化一个git repository |
git clone [project url] | 克隆一个仓库 |
常用git提交相关
命令片段 | 说明 |
---|---|
git status | 查看工作目录的情况 |
git add [file] | 把文件添加到暂存区 |
git diff [file] | 比较当前文件和暂存区的差别 |
git diff –staged [file] | 比较暂存区域和远程仓库的区别 |
git checkout – [file] | 当前working目录的内容重新检出(staged的不会影响),这个操作不可逆 |
git reset [<path>…] | 回退目录到某个状态 |
git commit | 创建一次提交 |
git rm [file] | 把文件从工作目录和暂存区删掉,相当于删除 = rm [file] + git add |
如果你有一些commit不想提交了,可以通过git reset [commit sha]回到那个地方,这个时候之后的commit都不会被提交
所以reset的时候注意操作,如果没有保存commit sha, 就得 .git/logs/refs/heads/main
里面找下了
所以为了防止丢失,建议首先git add你的文件,适当的时候commit
保存工作
命令片段 | 说明 |
---|---|
git stash | 把暂存区域的放到stash区域, 需要先git add |
git stash pop | 恢复stash区域 |
git stash drop | 丢掉某个stash区域 |
|
|
分支相关
命令片段 | 说明 |
---|---|
git branch [-a] | 显示所有的分支,-a表示也包含远程 |
git branch [branch_name] | 创建分支 |
git rebase [branch_name] | 变基,把当前的内容计算好追加到branch_name分支上,而不是合并 |
git checkout [-b] [branch_name] | 切换到分支,-b表示不存在就会创建 |
git merge [branch_name] | 把branch_name分支的内容合并到你的分支上面 |
git branch -d [branch_name] | 删除分支 |
|
|
关于rebase
加入现在需要开发一个hello world功能,我们创建feature-hello-world-rebase分支,功能开发完毕以后需要合并到main分支
创建分支,在分支开发完毕
|
|
rebase前我们先放点东西到main
|
|
qa在分支下测试ok开始执行合并,qa可以选择在main分支 git merge feature-hello-world-rebase
或者 git rebase feature-hello-wrold-rebase
我们试试rebase的效果
|
|
这里发现rebase把hello world的共塞进来了,如果是merge会怎么样呢
|
|
我们发现有了一次交叉,并且有merge的一次提交看起来非常不美观
查看inspect相关
命令片段 | 说明 |
---|---|
git log [-n count] | 显示提交记录 -n表示最近多少次的提交记录 |
git log –oneline –graph –decorate | 图形化展示 |
git log ref.. | 显示某个分支的提交 |
git reflog | 查看操作记录 |
加了..可以查看某个分支是否合并了当前分支的内容,这里我切到main发现feature-hello-world-rebase并没有merge或者合并main的内容到分支 而feature-hello-world-rebase已经合并了main的分支,因为查看是空
当我切到特性分支把main的内容rebase过来以后,在main下就发现没有未被对方merge的提交了
所以这个功能可以用于快速查看对方分支是否把自己的内容都merge过去了
可以在特性分支上 git ref main..以查看是否有漏合并的
反方向可以git ref ..特性分支
|
|
reflog
|
|
标签相关
命令片段 | 说明 |
---|---|
git tag | 显示标签 |
git tag [name] [commit sha] | 给某个commit打一个标签引用 |
git tag -a [name] [commit_sha] | 创建一个标签对象 |
git tag -d [name] | 删除一个标签 |
标签相关 标签主要用于打一些release等特殊情况,方便过滤
|
|
回滚变更
命令片段 | 说明 |
---|---|
git reset [–hard] [target reference] | 把当前分支切换到目标引用,如果–hard,那么当前编辑的内容未暂存的将会没有 |
git revert [commit sha] | 回滚某个变更 |
这里加入你改了一些东西,后来发现没啥意义想回到之前的情况,你可以直接reset就切回到刚开始的情况了 当然如果个别文件你也可以checkout
|
|
git revert,这里发现revert和rebase也是差不多的可能存在conflict,这里注意conflict以后只需要add就好了,不需要commit
|
|
同步仓库
命令片段 | 说明 |
---|---|
git fetch [remote] | 获取远程更新,但不执行更新 |
git fetch –prune [remote] | prune是修剪,把远程不存在的标签、分支删掉 |
git pull [remote] | 获取远程分支内容 |
git push [–tags] | 推送到远程分支或者标签 |
git push -u [remote] [branch] | 把推送到远程分支 |
git fetch是一个比较好的习惯,一般如果你直接pull或者merge之前先检查下变更了啥,是否要更新 git fetch是把远程的信息拉下来,但是暂时不处理,需要手动rebase或者merge
git pull相当于git fetch && git merge
|
|
忽略文件gitignore
可以发现.gitignore里面匹配的内容就不会自动到status记录里面
|
|