Git的功能不多做介绍。
git branch <new_branch>
git branch -a
或者
git branch -r
加上-a参数可以查看本地和远程分支,远程分支会用红色标识出来;加上-r参数只显示远程分支。
从当前master分支上创建v1.0分支,命令如下:
git checkout -b v1.0 master
将本地v1.0分支push到远程
git push origin v1.0:v1.0
在Git v1.7.0版本之后,可以使用这种语法删除远程分支:
git push origin --delete <branchName>
假设这样一种情况:
使用下面的命令查看b1的状态:
git remote show origin
结果如下所示:
* remote origin
Fetch URL: [email protected]:xxx/xxx.git
Push URL: [email protected]: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
在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
删除远程分支devel:
git push --delete origin devel
重命名本地分支:
git branch -m devel develop
推送本地分支:
git push origin develop
将分支v1.0合并到master,操作如下:
git checkout v1.0
git checkout master
git merge v1.0
在当前为master分支的情况下,执行merge命令即可。
git tag
这个列表是按照字母顺序给出的,其实排名先后跟重要程度没有直接联系。
当然,也可以按照特定表达式搜索某些标签。比如:
git tag -l v.1.2.*
git fetch origin tag <tagName>
在git中有两种最主要的标签:轻量级标签(lightweight)和带注释的标签(annotated)。轻量级标签跟分支一样,不会改变。它就是针对某个特定提交的指针。然后,带注释的标签是git仓库中的对象。它使一组校验和,包含标签名、email、日期、标签信息、GPG签名和验证。一般情况下,建议创建带注释的标签,这样就会保留这些信息,但是如果你只需要临时性标签或者某些原因你不想在标签中附带上面说的这些信息,lightweight标签更合适些。
在git中创建带注释的标签非常简单,运行如下命令即可:
git tag -a release_v1.0_20140930 -m "version v1.0"
可以使用git show命令查看相应标签的版本信息,并连同现实打标签时的提交对象。
git show release_v1.0_20140930
轻量级标签实际上就是存在一个文件中的提交校验和没有附加任何其他信息。创建轻量级标签的方法就是把上面“-a”,“-s”,“-m”和谐选项都去掉。
git tag v1.1
使用命令:
git tag -v release_v1.0_20140930
就可以验证一个签名标签了。这个命令会用到GPG来验证签名。前提是:你必须在密钥环中存放着签名者的公钥。
git push --tags
git push origin --delete tag <tagName>
或者
git tag -d <tagName>
git push origin :refs/tags/<tagName>
git ls-remote
现实文件的每一行是在哪个版本最后修改:
git blame filename.c
显示某个文件的每个版本提交信息:提交日期,提交人员,版本号,提交备注(没有修改细节)
git whatchanged charge.lua
显示某个版本的修改详情
git show 7aee80cd2afe3202143f379ec671917bc86f9771
或者
git log -p 7aee80cd2afe3202143f379ec671917bc86f9771
显示每个版本都修改了哪些文件:
git log --pretty=oneline
显示某个版本的某个文件修改情况
git log --pretty=oneline charge.lua
或者
git show 5aa1be6674ecf6c36a579521708bf6e5efb6795f charge.lua
用户的git配置文件为~/.gitconfig,常规配置信息如下:
# 设置user
git config --global user.name "robin"
git config --global user.email "[email protected]"
# 打开配色
git config --global color.ui true
# 设置alias
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
# 列举所有配置
git config -l
MacOSX下我的配置信息如下:
[user]
name = robin
email = [email protected]
[core]
excludesfile = /Users/robin/.gitignore_global
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s [%cn] %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
mkdir myproject
cd myproject
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://git-source/myproject.git
git push -u origin master
$git archive --format zip --output "./output.zip" master -0
git fetch --all
git reset --hard origin/v1.0
git pull
git fetch只是下载远程的库的内容,不做任何的合并;git reset把HEAD指向刚刚下载的最新的版本。
git checkout master
git reset --hard origin/master
git reset --hard develop
git push origin master --force
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
git shortlog -s|sort -r
git shortlog -s|sort -r|head -n 5
或者
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
git log --pretty='%aN' | sort -u | wc -l
git log --oneline | wc -l