zoukankan      html  css  js  c++  java
  • git命令整理

    结合使用情况并参考: https://www.jianshu.com/p/93318220cdce

    1,git保存的是提交commit的修改,修改包括新增,内容修改和删除;

    2,git管理的分支是提交commit的指针;

    3,每一个分支都是一条有commit组成的线 和 指向某一commit的指针;

    4,每一个commit都是一个独立的修改,同时包含了前面所有commit的一条线;

    5,拉取或推送分支出现冲突时,首先需要解决冲突;分支合并时如果出现冲突也需要解决冲突;

    6,工作区,暂存区,本地分支区,远程分支区

    一,全局设置

    git init #初始化仓库
    git config [--global] --list #查看配置信息
    git config [--global] user.name "name" #设置用户名称
    git config [--global] user.email "email" #设置用户邮箱
    git config [--global] --unset user.name #删除配置项

    二,查看消息

    git status
    git log #查看简单的提交历史
    git log --stat #比git log稍微详细,显示每次提交的修改的文件
    git log -p file #查看某个文件的每次提交修改的内容和提交信息
    git log --graph 
    git log --graph --pretty=oneline --abbrev-commit
    git reflog 查看本地命令历史记录
    git log --author='kuangzheng' #查看某个用户的提交记录
    
    git log branch1 ^branch2 #查看branch1分支有branch2分支无的log
    git log branch1..branch2 #查看branch2比branch1多提交了哪些内容,中间是2个点
    git log branch1...branch2 #单纯想知道2个分支的有哪些提交不一样;就是说要么在branch1要么在branch2上不会同时在,用--left-right参数更好
    git log --left-right branch1...branch2 #显示每个提交在哪个分支上,左箭头 < 表示在branch1上,右箭头在branch2上;中间是3个点
    
    git blame [-Ln1,n2] file  #显示文件的每一行[n1~n2行]最后修改的版本和作者, 
    
    git diff #已修改未暂存,已修改未add
    git diff --cached 或 git diff --staged #已暂存未提交,已add未commmit
    git diff branch remote(origin)/branch #已提交未推送
    
    git diff HEAD #显示工作区与当前分支最新commit之间的差异  
    git diff <commit ID> # 查看从指定的版本之后改动的内容 
    
    git diff branch1 branch2 --stat #显示出branch1和branch2中差异的部分
    git diff branch1 branch2 file #显示指定文件的详细差异
    
    git show [commit]显示某次提交的元数据和内容变化 
    git show --name-only [commit] 显示某次提交发生变化的文件 
    git show [commit]:[file]

    三,撤销

    参考: https://www.cnblogs.com/ymdphp/p/11127117.html

    //已修改,未暂存
    git checkout -- .
    git checkout -- file
    //已暂存,未提交
    //方法一
    git reset 重置暂存区与上一次commit保持一致,(暂存区变化清空,工作区不变)
    git checkout -- .
    或者:方法二
    git reset --hard
    //已提交,未推送
    git reset --hard remote(origin)/branch(master) //本地仓库被修改了,只能从关联的远程仓库恢复
    
    //已推送
    git reset --hard HEAD^
    git push -f
    
    git reset [commit]重置当前分支指针为指定commit,重置暂存区(暂存区变化清空,工作区不变)
    git reset --hard HEAD 撤销所有未提交文件的修改内容(暂存区变化清空,工作区变化)
    git reset --keep [commit] 重置当前HEAD为指定的commit(暂存区不变,工作区不变)
    
    //git clean 从你的工作目录中删除所有没有tracked过的文件(这个命令比较危险),必须加path,必须加path,必须加path
    git clean -n[xdf]  告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒
    git clean -f <path> 删除当前目录下[指定目录下]所有没有track过的文件. 他不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过
    git clean -xf <path> 删除当前目录下[指定目录下]所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件
    git clean -d <path> 删除当前目录下[指定目录下]所有没有track过的文件夹.
    git cleah -xd <path> 删除当前目录下[指定目录下]所有没有track过的文件夹. 不管他是否是.gitignore文件里面指定的文件夹和文件 git clean
    -df <path> 删除当前目录下[指定目录下]没有被track过的文件和文件夹 git clean -xdf <path> 删除当前目录下[指定目录下]没有被track过的文件和文件夹. 不管他是否时.gitignore文件里面指定的文件夹和文件
    git reset
    --hard和git clean -df是一对好基友. 结合使用他们能让你的工作目录完全回退到最近一次commit的时候

    四,代码提交

    #添加到暂存区
    git add file
    git add dir 添加指定目录到暂存区,包括子目录
    git add [file|dir|.] 添加所有修改,新增的文件到暂存区
    git add -u [file|dir|.] 添加所有修改,已删除的文件到暂存区
    git add -A [file|dir|.] 添加所有修改,已删除,新增的文件到暂存区

    #提交到本地仓库区
    git commit
    -a
    相当于先调用 git add -u
    git commit
    -m 'msg'
    git commit --amend -m 'msg' 重做上一次commit,如修改提交信息

     五,分支管理

    git branch 查看本地分支
    git branch -r 查看远程分支
    git branch -a 查看本地和远程全部分支
    git branch branch-name 创建分支
    git branch -d branch-name 删除分支(已合并)
    git branch -D branch-name 强制删除分支(未合并时使用)
    git branch -dr remote(origin)/branch-name 删除远程分支

    git checkout branch-name 切换到指定分支,并更新工作区暂存区清空
    git checkout -b branch-name 创建并切换分支

    git cherry-pick commit 选择一个commit合并到当前分支
    git merge branch-name 合并指定分支到当前分支
    #可能会发生冲突,1,先修改解决冲突,2,git add . ,3git commit -m ''
    git merge --no-ff -m 'msg' branch-name

    git rebase 把交叉的commit变成直线,强制变基

     六,工作区管理

    git stash 保存工作现场的变化内容,使工作区还原到HEAD,
    git stash save "save message"  : 执行存储时,添加备注,方便查找。
    git stash list 列出所有保存的工作区
    
    git stash pop [stash@{num}]还原上一次保存的工作现场,并删除(必须先commit)
    git stash apply [stash@{num}] 还原某一个工作区(必须先commit)
    git stash drop [stash@{num}] 删除某一保存的工作现场
    #stash@{num}是可选项,在多个工作进度中可以选择恢复,不带此项则默认恢复最近的一次进度相当于git stash (apply,drop,pop) stash@{0}
    
    git stash show 显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
    git stash clear 删除所以保存的工作进度

    七,远程仓库管理

    git remote [-v] 查看远程信息
    git remote show [remote] 显示某个远程仓库的信息
    git remote add origin-name url 添加远程仓库并起名为origin-name
    git remote rename origin-name origin-name-new 修改远程仓库的别名
    git remote set-url origin-name url 修改某个远程仓库的地址
    git remote rm origin-name 删除一个远程仓库
    git clone url 从远程仓库克隆项目和他的整个代码历史 git branch
    --set-upstream-to=remote(origin)/branch-name1 branch-name2 创建本地分支与远程仓库分支的链接关系
    git branch -u remote(origin)/branch-name1 建立远程分支与当前分支的关联关系
    git branch --unset-upstream 撤销当前分支与远程分支的关联关系 git fetch remote(origin) branch
    -name 将远程仓库指定分支的最新版本取回到本地 git fetch remote(origin) 将远程仓库所有分支的最新版本取回到本地
    git pull #将远程仓库所有分支的最新版本去回到本地,将远程仓库中与当前分支有关联的分支的修改合并到当前分支 git pull remote(origin) branch
    -name 拉取远程分支 (需要本地当前分支与远程分支有链接关系) git checkout -b 本地分支名x remote(origin)/远程分支名x #使用该方式会在本地新建分支x(可自定义分支名),并自动切换到该本地分支x,
    #本地分支会和远程分支建立映射关系,此命令需要先执行git pull git push [
    -u] origin branch-name 推送到远程分支,如果远程没有相应分支则会创建该分支,如果远程存在相关分支需要本地分支与远程该分支已关联 # -u 第一次使用可以把本地当前分支与远程分支关联起来,以后就不用再带上-u

    git push origin --delete branch-name git push
    --force 强行推送当前分支到远程仓库,即使有冲突 git push --all 推送所有分支到远程仓库 git push --tags 上传所有标签

    八,标签管理

    git tag 列出所有本地分支
    git tag tag-name 基于最新提交创建标签
    git tag -d tag-name 删除本地标签 
    git show tag-name 查看tag信息
    git push origin tag-name 提交指定tag到远程
    git push origin --tags 提交所有tag到远程
    #删除远程标签
    1,git tag -d tag-name 先删除本地标签
    2,git push origin :refs/tags/tag-name 然后在删除远程指定的标签
    #切换到某个tag
    git checkout tag_name#但是,这时候 git 可能会提示你当前处于一个“detached HEAD" 状态。因为 tag 相当于是一个快照,是不能更改它的代码的。如果要在 tag 代码的基础上做修改,你需要一个分支: 
    git checkout -b branch_name tag_name#且换到某个tag的正确方式

    reset ,branch ,checkout设计到远程仓库和分支的时候一般是/隔开

    九,其他重要命令

    #关于cherry-pick的使用
    
    #合并某次提交,如果没有冲突,可以直接成功
    git cherry-pick commitId
    
    #若有冲突解决冲突,解决冲突后暂存修改
    git add .
    #提交本次修改
    git cherry-pick continue
    
    #继续合并
    git cherry-pick commitId2

    十,git rebase命令

    #在最新master分支上,切一个开发或bug分支
    git checkout feature_branch
    
    #修改
    git add. 
    git commit -m 'xxx'
    ...
    
    #开始合并
    git fetch #拉去最新
    git rebase origin/master
    #有冲突就解决冲突
    
    #将本地分支推送到远程master分支
    git push origin feature_branch:master
  • 相关阅读:
    AcWing242一个简单的整数问题1(差分+树状数组)
    AcWing241楼兰图腾(树状数组)
    AcWing802区间和
    离散化
    AcWing1250格子游戏(并查集)
    vijos难解的问题(LIS最长上升子序列)
    动态规划dp——LIS(最长上升子序列)、LCS(最长公共子序列)
    约数、素数、gcd(最大公约数)、lcm(最小公倍数)
    vijos拓扑编号(逆向拓扑排序+优先队列)
    洛谷P1137旅行计划(拓扑排序+简单dp)
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/12443238.html
Copyright © 2011-2022 走看看