美文网首页
git常用操作

git常用操作

作者: 米酒真香 | 来源:发表于2018-05-09 20:34 被阅读71次

    1. 本地创建版本库

    mkdir note
    cd note
    git init  # 初始化git。 note目录下回多一个.git的隐藏目录。.git目录用来存放git版本控制的元数据,用以追踪文件的变化,不要动,否则会发生意想不到的后果。
    touch readme.md  #  创建readme.md文件。输入几行内容:如:my learning note\n Linux \n git \n MySQL
    $ cat -n readme.md  # 查看readme.md文件的内容
         1  my learning note
         2  Linux
         3  git
         4  MySQL
    
    wt@wt MINGW64 ~/Desktop/note (master)
    $ ls  # 查看当前目录下的文件
    git/  Linux/  MySQL/  readme.md
    $ git add readme.md  # 把readme.md添加到暂存区(以追踪文件的变化)
    warning: LF will be replaced by CRLF in readme.md.
    The file will have its original line endings in your working directory.
    
    $ git commit -m '提交test'  # 把暂存区内所有被追踪的内容(被add添加过的)提交到本地仓库
    [master 58577a4] 提交test1
     1 file changed, 3 insertions(+)
    
    
    $ vi readme.md  # 用vi编辑器打开readme.md文件,给文件添加一行汉字
    
    $ cat -n readme.md  # 查看文件
         1  my learning note
         2  Linux
         3  git
         4  MySQL
         5  添加汉字!
    
    wt@wt MINGW64 ~/Desktop/note (master)
    $ git status  # git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.md被修改过了,但还没有准备提交的修改。
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   readme.md   # 显示修改的文件
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            Linux/
            MySQL/
            git/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    $ git diff readme.md  # 查看文件变化
    diff --git a/readme.md b/readme.md
    index 01e4ef8..047b0de 100644
    --- a/readme.md  # 同一个文件的a,b两种不同的状态
    +++ b/readme.md
    @@ -2,6 +2,4 @@ my learning note
     Linux
     git
     MySQL
    -
    -add one line here;
     添加汉字!
    warning: LF will be replaced by CRLF in readme.md.
    The file will have its original line endings in your working directory.
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   readme.md
    
    Untracked files:  # 未追踪的文件,因为我们还没有git add 这些文件
      (use "git add <file>..." to include in what will be committed)
    
            Linux/
            MySQL/
            git/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    git add .  # 把当前目录下所有目录及文件添加到暂存区以追踪。相对于 git add -A或者git add ./*
    
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            new file:   "Linux/2018-5-6 Linux\350\246\201\345\246\202\344\275\225\345\255\246\344\271\240 160224.md"  # 这些是中文乱码,下面有解决这个问题的方法。
            new file:   Linux/Note3.md
            new file:   Linux/Note4.md
            new file:   Linux/note1.md
            new file:   Linux/note2.md
            new file:   MySQL/Note1.md
            new file:   "git/git\346\223\215\344\275\234.eddx"  # 中文乱码
            new file:   "git/git\346\223\215\344\275\234.png"  # 中文乱码
            new file:   git/note.md
            new file:   "git/\347\211\210\346\234\254\346\216\247\345\210\266.xmind"  # 中文乱码
            modified:   readme.md
    
    
    wt@wt MINGW64 ~/Desktop/note (master)
    $
    

    中文乱码的解决办法:

    在git命令行输入git config --global core.quotepath false 就可以了

    core.quotepath设为false的话,就不会对0x80以上的字符进行quote。中文显示正常

    2. git add 的参数

    rock@wtgg:~$ git add -h  # 关于添加的参数
    用法:git add [<选项>] [--] <路径规格>...
    
        -n, --dry-run         演习
        -v, --verbose         冗长输出
    
        -i, --interactive     交互式拣选
        -p, --patch           交互式挑选数据块
        -e, --edit            编辑当前差异并应用
        -f, --force           允许添加忽略的文件
        -u, --update          更新已跟踪的文件
        --renormalize         对已跟踪文件(暗含 -u)重新归一换行符
        -N, --intent-to-add   只记录,该路径稍后再添加
        -A, --all             添加所有改变的已跟踪文件和未跟踪文件
        --ignore-removal      忽略工作区中移除的路径(和 --no-all 相同)
        --refresh             不添加,只刷新索引
        --ignore-errors       跳过因出错不能添加的文件
        --ignore-missing      检查在演习模式下文件(即使不存在)是否被忽略
        --chmod <(+/-)x>      覆盖列表里文件的可执行位
    
    rock@wtgg:~$ 
    

    3. git commit 的参数

    git commit -m 用于提交暂存区的文件;git commit -am 用于提交跟踪过的文件

    rock@wtgg:~$ git commit -h
    用法:git commit [<选项>] [--] <路径规格>...
    
        -q, --quiet           提交成功后不显示概述信息
        -v, --verbose         在提交说明模板里显示差异
    
    提交说明选项
        -F, --file <文件>     从文件中读取提交说明
        --author <作者>       提交时覆盖作者
        --date <日期>         提交时覆盖日期
        -m, --message <说明>  提交说明
        -c, --reedit-message <提交>
                              重用并编辑指定提交的提交说明
        -C, --reuse-message <提交>
                              重用指定提交的提交说明
        --fixup <提交>        使用 autosquash 格式的提交说明用以修正指定的提交
        --squash <提交>       使用 autosquash 格式的提交说明用以压缩至指定的提交
        --reset-author        现在将该提交的作者改为我(和 -C/-c/--amend 参数共用)
        -s, --signoff         添加 Signed-off-by: 签名
        -t, --template <文件>
                              使用指定的模板文件
        -e, --edit            强制编辑提交
        --cleanup <default>   设置如何删除提交说明里的空格和#注释
        --status              在提交说明模板里包含状态信息
        -S, --gpg-sign[=<key-id>]
                              GPG 提交签名
    
    提交内容选项
        -a, --all             提交所有改动的文件 # 前提是此文件被追踪
        -i, --include         添加指定的文件到索引区等待提交
        --interactive         交互式添加文件
        -p, --patch           交互式添加变更
        -o, --only            只提交指定的文件
        -n, --no-verify       绕过 pre-commit 和 commit-msg 钩子
        --dry-run             显示将要提交的内容
        --short               以简洁的格式显示状态
        --branch              显示分支信息
        --ahead-behind        计算完整的领先/落后值
        --porcelain           机器可读的输出
        --long                以长格式显示状态(默认)
        -z, --null            条目以 NUL 字符结尾
        --amend               修改先前的提交
        --no-post-rewrite     绕过 post-rewrite 钩子
        -u, --untracked-files[=<模式>]
                              显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)
    
    rock@wtgg:~$ 
    

    4. git branch (分支)的参数

    git checkout -b feature-x develop 本地从develop分支上创建一个feature-x分支,并切换到该分支上
    它相当于这2条命令的合并:
    git branch feature-x develop
    git checkout feature-x

    git checkout develop # 切换回develop 分支
    git merge --no-ff feature-x 合并feature-x分支,加上--no-ff参数会保留版本演进路线,否则默认会执行"快进式合并"(fast-farward merge),会直接将feature-x分支指向Develop分支
    git branch -d feature-x # 本地删除feature-x分支-d是删除,如果该分支还没有被合并,会删除提示删除失败,-D是强制删除。
    git push origin -d <BranchName> # 删除远程分支
    或者git push origin(远程仓库名,不一定是origin) :远程分支名 # 注意origin:远程分支之间有一个空格,这里原本应该是写本地分支,现在留空,即把一个空的分支推送到远程的某个分支,相当于把远程的这个分支删除!
    git branch -r 列出所有的远程分支
    git branch -a 列出所有本地和远程分支
    git remote -v 列出远程仓库的信息
    例如

    λ git remote -v # 本项目关联了github和码云2个远程仓库。2个远程仓库的名字都不是origin,分别是gitee和github
    gitee   https://gitee.com/wtgg/my_spiders.git (fetch)
    gitee   https://gitee.com/wtgg/my_spiders.git (push)
    github  https://github.com/wtgg/my_spiders.git (fetch)
    github  https://github.com/wtgg/my_spiders.git (push)
    
    rock@wtgg:~$ git branch -h
    用法:git branch [<选项>] [-r | -a] [--merged | --no-merged]
      或:git branch [<选项>] [-l] [-f] <分支名> [<起始点>]
      或:git branch [<选项>] [-r] (-d | -D) <分支名>...
      或:git branch [<选项>] (-m | -M) [<旧分支>] <新分支>
      或:git branch [<选项>] (-c | -C) [<老分支>] <新分支>
      或:git branch [<选项>] [-r | -a] [--points-at]
      或:git branch [<选项>] [-r | -a] [--format]
    
    通用选项
        -v, --verbose         显示哈希值和主题,若参数出现两次则显示上游分支
        -q, --quiet           不显示信息
        -t, --track           设置跟踪模式(参见 git-pull(1))
        -u, --set-upstream-to <上游>
                              改变上游信息
        --unset-upstream      取消上游信息的设置
        --color[=<何时>]      使用彩色输出
        -r, --remotes         作用于远程跟踪分支
        --contains <提交>     只打印包含该提交的分支
        --no-contains <提交>  只打印不包含该提交的分支
        --abbrev[=<n>]        用 <n> 位数字显示 SHA-1 哈希值
    
    具体的 git-branch 动作:
        -a, --all             列出远程跟踪及本地分支
        -d, --delete          删除完全合并的分支
        -D                    删除分支(即使没有合并)
        -m, --move            移动/重命名一个分支,以及它的引用日志
        -M                    移动/重命名一个分支,即使目标已存在
        -c, --copy            拷贝一个分支和它的引用日志
        -C                    拷贝一个分支,即使目标已存在
        --list                列出分支名
        -l, --create-reflog   创建分支的引用日志
        --edit-description    标记分支的描述
        -f, --force           强制创建、移动/重命名、删除
        --merged <提交>       只打印已经合并的分支
        --no-merged <提交>    只打印尚未合并的分支
        --column[=<风格>]     以列的方式显示分支
        --sort <key>          排序的字段名
        --points-at <对象>    只打印指向该对象的分支
        -i, --ignore-case     排序和过滤属于大小写不敏感
        --format <格式>       输出格式
    
    rock@wtgg:~$ 
    

    5. git merge (合并)的参数

    rock@wtgg:~$ git merge -h
    用法:git merge [<选项>] [<提交>...]
      或:git merge --abort
      或:git merge --continue
    
        -n                    在合并的最后不显示差异统计
        --stat                在合并的最后显示差异统计
        --summary             (和 --stat 同义)
        --log[=<n>]           在合并提交信息中添加(最多 <n> 条)精简提交记录
        --squash              创建一个单独的提交而不是做一次合并
        --commit              如果合并成功,执行一次提交(默认)
        -e, --edit            在提交前编辑提交说明
        --ff                  允许快进(默认)
        --ff-only             如果不能快进就放弃合并
        --rerere-autoupdate   如果可能,重用冲突解决更新索引
        --verify-signatures   验证指定的提交是否包含一个有效的 GPG 签名
        -s, --strategy <策略>
                              要使用的合并策略
        -X, --strategy-option <option=value>
                              所选的合并策略的选项
        -m, --message <说明>  合并的提交说明(针对非快进式合并)
        -v, --verbose         更加详细
        -q, --quiet           更加安静
        --abort               放弃当前正在进行的合并
        --continue            继续当前正在进行的合并
        --allow-unrelated-histories
                              允许合并不相关的历史
        --progress            强制显示进度报告
        -S, --gpg-sign[=<key-id>]
                              GPG 提交签名
        --overwrite-ignore    更新忽略的文件(默认)
        --signoff             添加 Signed-off-by: 签名
        --verify              校验 commit-msg 钩子
    
    rock@wtgg:~$ 
    
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
    

    6. git push 推送

    先在Github 或者coding.net 或者码云 上面新建代码仓库,复制仓库的ssh或者https地址

    $ git remote add origin git@git.coding.net:xxx/xxx.git 关联远程仓库

    $ git push -u origin master 第一次推送时 加上-u 参数。

    以后每次git push origin 本地仓库:远程仓库 就可以推送了。

    如果本地仓库和远程仓库同名。可以简化为:git push origin 仓库名

    其中 origin是远程仓库的代称,也可以是别的名字,比如
    git remote add github https://github.com/wtgg/my_spiders.git # 关联我github上的my_spiders项目仓库,远程仓库取名github,而不是origin,
    git remote add gitee https://gitee.com/wtgg/my_spiders.git # 关联我码云上的my_spiders项目仓库,远程仓库取名为gitee。同一个项目关联2个远程仓库,所以2个远程仓库取了不同的名字。
    推送的时候
    git push github master # 把项目推送到github的master分支
    git push gitee master # 把项目推送到码云的master分支
    如果要推送分支:
    git push github dev:dev # 推送本地的dev分支到github的dev分支
    git push gitee dev:dev # 推送本地的dev分支到码云的dev分支

    git pull origin <远程分支>:<本地分支>
    git push origin <本地分支>:<远程分支>
    
    rock@wtgg:~$ git push -h
    用法:git push [<选项>] [<仓库> [<引用规格>...]]
    
        -v, --verbose         更加详细
        -q, --quiet           更加安静
        --repo <仓库>         仓库
        --all                 推送所有引用
        --mirror              镜像所有引用
        -d, --delete          删除引用
        --tags                推送标签(不能使用 --all or --mirror)
        -n, --dry-run         演习
        --porcelain           机器可读的输出
        -f, --force           强制更新
        --force-with-lease[=<引用名>:<期望值>]
                              要求引用旧的取值为设定值
        --recurse-submodules[=<check|on-demand|no>]
                              控制子模组的递归推送
        --thin                使用精简打包
        --receive-pack <receive-pack>
                              接收包程序
        --exec <receive-pack>
                              接收包程序
        -u, --set-upstream    设置 git pull/status 的上游
        --progress            强制显示进度报告
        --prune               清除本地删除的引用
        --no-verify           绕过 pre-push 钩子
        --follow-tags         推送缺失但有关的标签
        --signed[=<yes|no|if-asked>]
                              用 GPG 为推送签名
        --atomic              需要远端支持原子事务
        -o, --push-option <server-specific>
                              传输选项
        -4, --ipv4            只使用 IPv4 地址
        -6, --ipv6            只使用 IPv6 地址
    

    7. git log 参数

    rock@wtgg:~$ git log -h
    用法:git log [<选项>] [<版本范围>] [[--] <路径>...]
      或:git show [<选项>] <对象>...
    
        -q, --quiet           不显示差异输出
        --source              显示源
        --use-mailmap         使用邮件映射文件
        --decorate-refs <模式>
                              只修饰与 <模式> 匹配的引用
        --decorate-refs-exclude <模式>
                              不修饰和 <模式> 匹配的引用
        --decorate[=...]      修饰选项
        -L <n,m:file>         处理文件中第 n 到 m 之间的行,从 1 开始
    
    rock@wtgg:~$ 
    

    $ git log --pretty=oneline; 以简明的信息显示版本号(40位16进制数字) 和 对应的提交信息,便于版本恢复。这个命令会显示所有项目成员与远程仓库同步的提交信息。

    $ git reflog 显示当前用户每此的版本号(即commit id)与对应的提交信息,不过这里的版本号只显示前几位,也能用于恢复版本

    8. git reset --hard 版本号 版本回退

    rock@wtgg:~/PycharmProjects/abc$ git reset -h
    用法:git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<提交>]
      或:git reset [-q] [<树或提交>] [--] <路径>...
      或:git reset --patch [<树或提交>] [--] [<路径>...]
    
        -q, --quiet           安静模式,只报告错误
        --mixed               重置 HEAD 和索引
        --soft                只重置 HEAD
        --hard                重置 HEAD、索引和工作区
        --merge               重置 HEAD、索引和工作区
        --keep                重置 HEAD 但保存本地变更
        --recurse-submodules[=<reset>]
                              control recursive updating of submodules
        -p, --patch           交互式挑选数据块
        -N, --intent-to-add   将删除的路径标记为稍后添加
    

    9. 其他

    git查看远程仓库地址命令

    $ git remote -v
    origin  git@git.coding.net:wtgg/note.git (fetch)
    origin  git@git.coding.net:wtgg/note.git (push)
    

    如果本地显示推送成功,但是在网页看不到更新。有可能是推送到别的地址上了。(有时候打开好几个仓库,复制粘贴了错的远端地址)

    Git远程仓库地址变更本地如何修改

    相关文章

      网友评论

          本文标题:git常用操作

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