git-tag shell
#!/bin/bash
branch="test"
if `git status | grep "RELEASE" &>/dev/null`; then
branch="pro"
fi
user=$(echo $(git config user.name))
date=$(echo $(date +'%Y%m%d'))
prefix=$(echo ${branch}-${user}-${date})
count=$(echo $(git tag -l "${prefix}-*" | wc -l | xargs printf '%02d'))
function me-tag() {
git push
git pull --tags
local new_tag=$(echo ${prefix}-${count})
echo ${new_tag}
git tag ${new_tag}
git push origin $new_tag
}
me-tag;
更新所有仓库
find ./ -type d -name '\.git' -mindepth 1 -maxdepth 3 \
-exec sh -c \
'
pathgit=$0/$1;
pathrepo=$(dirname $pathgit);
echo "尝试更新仓库:"{$pathrepo};
git --git-dir=$pathgit --work-tree=$pathrepo checkout .
git --git-dir=$pathgit --work-tree=$pathrepo pull -r
' \
$PWD {} \;
统计某分支的所有历史记录
git reflog –date=local | grep ‘branchname’
合并分支
git merge –no-ff:不使用fast-forward方式合并,保留分支的commit历史 git merge –squash:使用squash方式合并,把多次分支commit历史压缩为一次
Https记住密码
永久记住密码: git config –global credential.helper store 会在用户主目录的.gitconfig文件中生成下面的配置。
[credential]
helper = store
忽略
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如果没有这个文件,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:
-
此为注释 – 将被 Git 忽略
- *.sample # 忽略所有 .sample 结尾的文件
- !lib.sample # 但 lib.sample 除外
- /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
- build/ # 忽略 build/ 目录下的所有文件
- doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
.gitignore规则不生效的解决办法
把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:
github
- 拉取某个Pull Request, 并切换 git fetch gctt pull/1409/head git checkout FETCH_HEAD
git rm -r --cached .
git add .
git commit -m 'update .gitignore'