美文网首页
git 使用笔记(持续更新)

git 使用笔记(持续更新)

作者: chengjian666 | 来源:发表于2019-01-10 15:14 被阅读79次

    基本业务场景处理

    1. 使用git查看比较两次提交的差异,仅查看变化的文件:

    git diff code1 code2 --name-only
    

    2. 使用git比较两次提交的差异:

    git diff code1 code2
    

    以上命令即将列出所有的文件及改动部分;注意比较次序,是code2相对于code1的变动,即code2被认为是最近提交;

    同时如果想以当前提交作为起点进行推算,那么可以借助HEAD指针:

    git diff HEAD~1 HEAD~0 --name-only
    

    以上命令表示列出上上次提交和最近一次提交变动的文件列表;

    3. 使用git提交到远程分支

    git push origin local_branch_name:remote_branch_name
    

    其中 local_branch_name即为本地当前的提交分支名称; remote_branch_name即为将提交至的远程分支名称;
    当然如果已经建立了本地分支和远程分支的追踪关系,那么直接可以省掉后面的分支信息:

    git push origin
    

    4. 建立本地分支与远程分支的追踪关系

    为了便于分支管理和提交,最好的做法是在本地创建分支时即创建本地分支与远程分支的追踪关系,并且为了方便,最好是使用相同的分支名称:

    git checkout -b local_branch_name origin/remote_branch_name
    

    通过这种方式,就可以直接在本地创建一个与远程分支相对应的本地分支;

    5. 显示当前所有本地分支与远程分支的追踪关系

    为了实时看到当前的分支状态:本地所有分支、本地分支和远程分支的追踪关系、当前分支的更新状态等;

    git remote show origin
    

    6. 本地修改与远程代码合并

    同一个分支当前可能同时由多人在协同开发,因此在提交本地修改时,本地代码可能已经过期,需要与远程分支上最新代码合并之后才能提交;

    1. 首先需要保存下我们当前本地的修改:
    git stash
    
    2.当执行完以上命令,当前本地将回到修改前的commit,此时可以继续更新远程分支上的提交:
    git pull origin
    

    此时,远程分支上的提交就会被同步下来,此时本地代码已经被同步为远程分支上的最新代码;

    3.此时需要将我们之前所做的修改与当前库上最新的代码进行合并
    git stash pop
    

    并且会执行自动合并,如果没有冲突,那就可以检查后直接提交;但是如果有冲突,就去合并之后的文件中找到冲突的地方,全部冲突修改完成之后,再提交即可;

    关于stash 的用法后面还有更多介绍。

    基本命令功能

    本节对各个基本命令的用法/参数进行详细的介绍,深入了解各个命令的详细用法,可以覆盖更多的业务场景,提升管理效率。

    1. git stash

    git stash 命令用于暂存当前本地工作临时状态,用于紧急处理其他任务/合并远程修改进行本地提交/本地变更尝试方案等场景。

    //会将当前的工作状态进行缓存,默认有递增id
    git stash
    //在将当前的工作状态进行缓存的同时,给本地缓存进行备注
    git stash save "description"
    //查看当前已经缓存列表
    git stash list
    //根据在stash list中的缓存列表id,可以指定恢复到某一个工作状态
    git stash apply stash@{id}
    //与apply命令不同,执行pop命令之后,stash缓存中即会移除该stash;
    git stash pop stash@{id}
    //清除所有stash缓存
    git stash clear
    //移除某个stash
    git stash drop stash@{id}
    

    git stash 支持跨分支的,但是同时每个stash均会有所在分支及基准commit记录,因此可以清晰知道每个stash该合并到何处分支的commit。

    2. 关联远程分支

    git remote remove origin  
    git branch --set-upstream-to origin/develop develop  
    //或者  
    git remote add origin git@github.com:git_username/repository_name.git
    

    3. 添加忽略文件

    //将文件移除track, git status将不会看到
    git update-index --assume-unchanged <files>
    //重新恢复track
    git update-index --no-assume-unchanged <files>
    

    当不小心忽略的文件过多,有如下相关操作:

    • 查看当前被忽略的文件
    git ls-files -v | grep '^h\ '
    
    • 查看所有当天被忽略文件的路径
    git ls-files -v | grep '^h\ ' | awk '{print $2}'
    
    • 恢复所有当前被忽略的文件
    git ls-files -v | grep '^h' | awk '{print $2}' |xargs git update-index --no-assume-unchanged
    

    4. 统计代码修改量

    git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
    

    修改username之后执行将会打印:

    added lines: 120745, removed lines: 71738, total lines: 49007
    

    统计所有人的修改量:

    //统计提交贡献量前5名
    git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
    //查看所有人的提交情况
    git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
    

    修改当前分支名称:

    git branch -m old_branch_name new_branch_name
    

    5. 配置difftool

    安装beyond compare之后可以设置为git比较工具。

    git查看有哪些对比工具可以设置命令:

    $ git difftool --tool-help
    

    会得到如下列表:

    'git difftool --tool=<tool>' may be set to one of the following:  
                    vimdiff                                           
                    vimdiff2                                          
                    vimdiff3                                          
                                                                      
    The following tools are valid, but not currently available:       
                    araxis                                            
                    bc                                                
                    bc3                                               
                    codecompare                                       
                    deltawalker                                       
                    diffmerge                                         
                    diffuse                                           
                    ecmerge                                           
                    emerge                                            
                    examdiff                                          
                    guiffy                                            
                    gvimdiff                                          
                    gvimdiff2                                         
                    gvimdiff3                                         
                    kdiff3                                            
                    kompare                                           
                    meld                                              
                    opendiff                                          
                    p4merge                                           
                    tkdiff                                            
                    winmerge                                          
                    xxdiff                                            
                                                                      
    Some of the tools listed above only work in a windowed            
    environment. If run in a terminal-only session, they will fail.   
    

    然后再设置对比工具:

    $ git config --global diff.tool bc3
    $ git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"
    

    如果安装的是beyond compare 4,那么也同样设置为bc3,并指向beyond compare 4的安装地址。

    或者可以直接修改.gitconfig文件:

    [diff]
        tool = bc3
    [difftool "bc3"]
        path = d:/program files/beyond compare 3/bcomp.exe
    [merge]
        tool = bc3
    [mergetool "bc3"]
        path = d:/program files/beyond compare 3/bcomp.exe
    

    6. --no-commit

    如果在合并某个分支之前想看一下详细的所有变动后微调再提交而不是直接合并生成commit,那么这个命令就很管用。
    常规场景:

    git merge test_branch
    

    假设此时test_branch上有一个0329c的commit即将合并到master,如果没有冲突,执行合并完成后会在master上生成一个新的commit。但是如果需要有人帮忙review或者还可能需要微调后才能合并到master,那么可以避免直接生成这个commit:

    git merge test_branch --no-commit
    git reset
    git difftool
    

    这样不管有没有冲突,就可以进行改动的review,十分方便。

    相关文章

      网友评论

          本文标题:git 使用笔记(持续更新)

          本文链接:https://www.haomeiwen.com/subject/cbjarqtx.html