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
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/12443238.html
Copyright © 2011-2022 走看看