Git

gitgit约 625 字大约 2 分钟

常用命令

分支

命令说明
git branch -a列出分支
git remote show origin列出本地&远程分支
git remote prune origin删除本地无效分支 (慎用)
git branch -d [branch name]删除本地分支
git push origin --delete [remote branch]删除远程分支
git checkout [branch name]切换到指定分支,不存在则报错
git checkout -b [branch name]不存在则新建
git checkout -b [branch name] origin/[remote branch]拉取远程分支代码并再本地才能关键分支 (先切换到要远程分支, pull一下,保持代码最新) 然后再拉取
git push origin feature/1234:feature/1234推送本地分支到远程

tag

命令说明
git tag列出本地仓库所有的tag
git ls-remote --tags origin列出远程仓库所有tag
git tag [tag name]打标签
git push origin --delete tag [ tag name ]删除远程 标签
git tag -d [tag name]删出本地标签
git push origin [tag name]推送标签到仓库
git checkout [tag name]切换到指定标签
git checkout -b [ branch] [tag name]基于tag新建分支

显示分支与路径

vi ~/.bashrc 记得soure

function git_branch {
    ref=$(git symbolic-ref HEAD 2> /dev/null) || return;
    echo "("${ref#refs/heads/}") ";
}

function parse_git_dirty {
    local git_status=$(git status 2> /dev/null | tail -n1) || $(git status 2> /dev/null | head -n 2 | tail -n1);
    if [[ "$git_status" != "" ]]; then
        local git_now; # 标示
        if [[ "$git_status" =~ nothing\ to\ commit || "$git_status" =~  Your\ branch\ is\ up\-to\-date\ with ]]; then
            git_now="=";
        elif [[ "$git_status" =~ Changes\ not\ staged || "$git_status" =~ no\ changes\ added ]]; then
            git_now='~';
        elif [[ "$git_status" =~ Changes\ to\ be\ committed ]]; then #Changes to be committed
            git_now='*';
        elif [[ "$git_status" =~ Untracked\ files ]]; then                                                                                                           
            git_now="+";
        elif [[ "$git_status" =~ Your\ branch\ is\ ahead ]]; then
            git_now="#";
        fi
        echo "${git_now}";
    fi
}

PS1="[\[\e[1;35m\]\u\[\e[1;32m\]@hostname:\w\[\e[0m\]] \[\e[0m\]\[\e[1;36m\]\$(git_branch)\[\033[0;31m\]\$(parse_git_dirty)\[\033[0m\]]\$"   

FAQ

权限不足

由于昨晚新增和修改了文件,今早到公司就进行了个pull的操作

却提示

来自 git.oschina.net:user/django
 * branch            master     -> FETCH_HEAD
更新 c1dc841..f21e3fe
error: unable to unlink old 'study/app1/__pycache__/__init__.cpython-35.pyc' (权限不够)
....
....
#全是权限不足,第一反应是sudo的原因.没多想就直接sudo操作了,然后提示

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

搜索相关解决办法,基本解决办法都是说重新生成秘钥.然后复制到git,操作后并不能解决问题.

静下来想想,那出问题的可能就是别的权限了.

原来昨晚创建了新的文件夹用的是sudo创建的 秘钥的所属是当前用户,,文件夹的所属是root

然后更改文件夹所属就好了

chown user:group /dir