Git针对branch、tag的相关操作(查看、删除、重命名)
1.查看远程分支
`#-a参数可以查看远程分支,远程分支会用红色表示出来(需要在config中进行颜色配置):``git branch -a`
2.删除远程分支
方法一:直接删除
`git push origin --delete <branchName>`
方法二:推送一个空分支到远程分支
`git push origin :<branchName>`
3.删除远程tag
方法一:直接删除
`git push origin --delete <tagname>`
方法二:推送一个空tag到远程tag
`git tag -d <tagname>``git push origin :refs``/tags/``<tagname>`
4.删除不存在对应远程分支的本地分支
假设这样一种情况:
-
我创建了本地分支b1并push到远程分支
origin/b1
; -
其他人在本地使用fetch或pull创建了本地的b1分支;
-
我删除了
origin/b1
远程分支; -
其他人再次执行fetch或者pull并不会删除这个他们本地的
b1
分支,运行git branch -a
也不能看出这个branch被删除了,如何处理?
使用下面的代码查看b1的状态:
`git remote show origin``* remote origin`` ``Fetch URL: git@github.com:xxx``/xxx``.git`` ``Push URL: git@github.com:xxx``/xxx``.git`` ``HEAD branch: master`` ``Remote branches:`` ``master tracked`` ``refs``/remotes/origin/b1` `stale (use ``'git remote prune'` `to remove)`` ``Local branch configured ``for` `'git pull'``:`` ``master merges with remote master`` ``Local ref configured ``for` `'git push'``:`` ``master pushes to master (up to ``date``)`
这时候能够看到b1是stale的,使用 git remote prune origin
可以将其从本地版本库中去除。
更简单的方法是使用这个命令,它在fetch之后删除掉没有与远程分支对应的本地分支:
`git fetch -p`
5.重命名远程分支
在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。
例如下面的例子中,我需要把 devel 分支重命名为 develop 分支:
`git branch -av``* devel 752bb84 Merge pull request ``#158 from Gwill/devel`` ``master 53b27b8 Merge pull request ``#138 from tdlrobin/master`` ``zrong 2ae98d8 modify CCFileUtils, ``export` `getFileData`` ``remotes``/origin/HEAD` `-> origin``/master`` ``remotes``/origin/add_build_script` `d4a8c4f Merge branch ``'master'` `into add_build_script`` ``remotes``/origin/devel` `752bb84 Merge pull request ``#158 from Gwill/devel`` ``remotes``/origin/devel_qt51` `62208f1 update .gitignore`` ``remotes``/origin/master` `53b27b8 Merge pull request ``#138 from tdlrobin/master`` ``remotes``/origin/zrong` `2ae98d8 modify CCFileUtils, ``export` `getFileData`
删除远程分支:
`git push --delete origin devel`
重命名本地分支:
`git branch -m devel develop`
推送本地分支:
`git push origin develop`
6.创建/删除本地tag
创建本地tag:
`git tag -a <tagname> -m ``"messsage"`
删除本地tag:
`git tag -d <tagname>`
7.推送本地tag到远程
`git push origin --tags`
8.获取远程tag
`git fetch origin tag <tagname>`
1.直接记录快照,而非差异比较
其它大部分系统(CVS、Subversion、Perforce、Bazaar 等等)以文件变更列表的方式存储信息。 这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
而git把数据看成是对小型文件系统的一组快照。每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git 对待数据更像是一个 快照流。
2.近乎所有操作都是本地执行
如何做到:本地数据库读取
3.git保证完整性
利用文件内容的哈希值来索引
--哈希值:
4.git一般只添加数据
5.三种状态
已提交(committed)/已修改(modified) /已暂存(staged)