zoukankan      html  css  js  c++  java
  • Git常用操作

    分支管理

    查看当前所属分支:

    git branch
    

    本地分支改名:

    # 当前分支
    git branch -m <new_branch_name>
    # 非当前分支
    git branch -m <old_branch_name> <new_branch_name>
    

    查看git graph图:

    git log --graph --decorate --oneline --all
    

    对照分支关系图梳理分支关系,在trunk based的分支模型中非常实用。

    切换分支:

    git checkout <another-branch>
    

    基于当前分支创建新分支并切换:

    git checkout -b <new-branch>
    

    基于某一分支或提交创建新分支并切换:

    git checkout -b <new-branch> <existed branch or commit>
    

    暂时将当前工作压栈:
    如果当前分支有未完成的工作,切换分支会失败。一种解决办法是线暂时commit,并在提交记录中标记WIP或者直接用.这么一个最短记录,其中 WIP 是 work in progress 的缩写。另一种办法是暂时将当前修改压栈,等下次切换回来的时候弹栈就好了。这样做的好处是不会污染提交记录。

    # 压栈
    git stash
    # 出栈
    git stash pop
    # 查看栈中的记录
    git stash list
    

    有时候弹出栈顶的时候,本地代码已经修改过了,会发生冲突。这个时候即使解决完了冲突,栈顶的记录也不会消失,解决办法是手动删除栈内记录:

    git stash drop <stash@{id}>
    

    默认是stash@{0}也就是栈顶。

    重新设置当前分支分叉位置,也叫变基:

    git rebase <base-branch>
    

    提倡加入 -i 参数,可以同时合并、删除、重新编辑本分支历史提交记录,只需要将每一条提交记录前面的pick修改为对应的squash、drop、edit等即可。

    变基的时候,有时候会提示发生冲突,手动解决冲突之后,继续变基操作:

    git rebase --continue
    

    有时想要直接忽略掉后续冲突的提交,使用以下命令:

    git rebase --skip
    

    有时候并不想忽略冲突提交,误操作了找回被忽略的提交:

    # 首先查看操作记录,找到变基之前的最后一次提交
    git reflog
    # 以此为基础,创建新分支 recovery 用于重新解决冲突
    git checkout -b recovery <commit-id>
    ... 解决冲突并continue
    # 切换回分支,重新变基
    git checkout <work-branch>
    git rebase recovery
    # 删除无用分支
    git branch -d recovery
    

    代码管理

    查看每次提交修改的文件列表:

    git log --name-status
    

    列出某一文件的修改记录:

    git log <file-name>
    

    查看某一次提交的修改:

    git show <commit-id>
    

    缺省查看最后一次提交的修改。

    增量修改最后一次提交:

    git commit --amend
    

    如果只改动代码,不需要改动提交信息的话:

    git commit --amend --no-edit
    

    ps: 如果想要增量修改以前的某次提交,需要两次rebase -i操作:
    首先提交补丁成一个commit,然后第一次rebase -i移动此commit到需要修改的记录之后,并注意解决冲突;
    然后第二次rebase -i合并进前一次的提交之中,需要用到的编辑选项是f,也就是fixup,这样提交记录会和前一次保持不变。
    注意本分支rebase过之后,基于此分支的分支都会变,需要重新rebase本分支。对于不需要的旧commit,直接使用编辑选项d,也就是drop抛弃即可。

    撤回最近N次提交:

    git reset HEAD~N
    

    默认撤回到工作区(workspace),撤回到暂存区需要加参数--soft,直接删除需要加--hard

    比较修改前后的变化。
    对比工作区与暂存区:

    git diff
    

    对比暂存区与历史记录:

    git diff --cached
    

    对比工作区与某一历史记录的变化(如HEAD~1):

    git diff HEAD~2
    

    对比某文件(如a.txt)在工作区与某一历史记录的变化(如HEAD~2):

    git diff HEAD~2 --a.txt
    

    对比某文件(如a.txt)在某两个历史记录之间的变化(如HEAD2和HEAD5):

    git diff HEAD~2 HEAD~5 --a.txt
    

    设置提交时间戳
    有时候发现一处修改应该及早提交,如果直接commit然后rebase调整顺序的话会发现:虽然该提交的顺序前移了,但是显示的提交时间仍然是当前提交时间。修改时间戳的办法是提交的时候加入--date=<commit-time>选项:

    git commit --date=<commit-time> -m <commit-message>
    

    注意时间戳的格式要保持正确,可以直接复制git log中某个时间戳然后修改。
    对于最后一次的提交,要修改时间戳,可以直接用--amend --date=<commit-time>来设置。

    仓库清理

    查看当前文件夹大小:

    du -hs .
    

    查看子文件夹大小:

    du -hs *
    

    从提交记录中清理大文件:

    git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch <big-file>' --prune-empty --tag-name-filter cat -- --all
    

    删除本地文件残留回收空间:

    git reflog expire --expire=now --all
    git gc --prune=now
    
  • 相关阅读:
    CSS Sprite
    使用float和display:block将内联元素转换成块元素的不同点
    [POJ 1185] 炮兵阵地
    [POJ 1947] Rebuilding Roads
    [HDU 1561] The more, The Better
    [HDU 1011] Starship Troopers
    [POJ 1155] TELE
    [HDU 2196] Computer
    [HDU 1520] Anniversary party
    [HDU 5029] Relief grain
  • 原文地址:https://www.cnblogs.com/zhcpku/p/13441277.html
Copyright © 2011-2022 走看看