• Git命令小总结


    常用

    • git init git 初始化
    • git clone https://github.com/wsxx111/thisStudy.git 从远端拉下来
    • git status 查看跟踪状态
    • git status -s (喜爱简介版本)
    • git add readme.txt 添加到暂存区
    • git commit -m '新提交' 从暂存区到提交到库存
    • git commit -am'新提交' 直接略add过暂存区,提交到库存 (书上不怎么推荐)
    • git commit --amend -m '重新提交' 修复上次提交的 ,相当于 git reset head^ 了一下,又重新提交了

    查看

    • git remote 查看远端仓库名
    • git remote -v 查看远端地址
    • git remote show origin 查看本地和远端分支信息

    日志

    • git log 查看日志
    • git log -3 查看前3条日志 (分支下的记录,不是所有的)
    • git log -s -2 (简单版)
    • git log --graph 左边有分支图
    • git log --pretty=oneline 版本号一目了然
    • git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

    分支

    • git branch 查看本地分支
    • git branch -r 查看远程分支
    • git branch -a 查看本地和远程分支
    • git branch dev 新建未存在的分支dev
    • git branch -d test 删除分支test
    • git branch -D test 当上面提示:分支有没有合并到当前分支的内容,没法删除时 就需要强制删除了,这个就是强制删除
    • git push --delete origin test 删除远端分支test
    • git branch -d -r new // 删除远程new分支
    • git checkout test 切换到已存在的分支test上
    • git checkout -b test 新建并切换test分支上,基于本地创建分支
    • git checkout -b dev origin/dev 基于远程分支创建本地分支,注意不能这么写 git checkout -b develop origin develop
    • git branch -m | -M oldbranch newbranch // 重命名分支,如果newbranch名字已经存在,需用-M强制重命名
    • 当前分支为dev, git checkout master =git checkout dev master 是dev相对于master发生的改变

    • git branch -v // 显示分支信息

    • 你在一个分支中工作,但是像获取另一个分支中的某个文件。
       git checkout <branch> -- <file>
      例如master 有个a.txt文件,现在dev分支上执行 git checkout master -- a.txt
      之后,dev分支会多一个a.txt,(是跟踪未add状态)

    撤销

    • git reset --hard 撤销修改 到未修改的干净状态
    • git reset --hard head 与上面一样(对未add命令的和已add未commit的撤销到未add的未修改干净状态)
    • git reset --hard 34csdds 撤销到某个版本
    • git reset --hard head^ 撤销到未修改的干净状态的上一个提交版本
    • git reset --hard head^^ 撤销到未修改的干净状态的上两个提交版本
    • git reset --hard head~4 撤销到未修改的干净状态的上四个提交版本
    • git checkout -- readme.txt (对未add但修改了,撤销到未修改,对已经add又修改了,撤销到未修改已add状态) 去掉 -- 也是一样的(git checkout readme.txt),但建议带着 避免与切换分支产生分歧就不好了
    • git reset (等于 git reset --soft) 或者git reset head 把add暂存区里面的给撤回到未add的工作区中,注意,只是改变状态,没有改变文件里面的内容,而chekout --改变的是内容,不涉及状态
    • git reset HEAD readme.txt 撤销某文件,但不能硬撤销某文件,只能软撤销
    • git reset --hard 或者git reset --hard head 这个是回复到未修改的工作区,即未add的工作区中,和上面 git reset 还是不一样的,git reset 默认是git reset --soft

    合并

    • git merge test 把test分支合并到当前分支 (合并前记得切换好分支),可以加 -m 进行解释
    • git merge --ff test 和上面一样。 --ff是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-forward模式。当前分支合并到另一分支时,如果没有分歧解决,就会直接移动文件指针。这个过程叫做fast forward。

      例如,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个develop的分支,并在其上进行一系列提交,完成时,回到 master分支,此时,master分支在创建develop分支之后并未产生任何新的commit。此时的合并就叫fast forward。master在合并develop分支的时候并没有产生新的节点,如果是--no-ff 会生成一个节点

    • git merge --no-ff -m '提交合并' 不fast-forward合并
    • git merge --abort 该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态
    • git merge dev --squash 当一个合并发生时,从当前分支和对方分支的共同祖先节点之后的对方分支节点,一直到对方分支的顶部节点将会压缩在一起,使用者可以经过审视后进行提交,产生一个新的节点。

      在看到冲突以后,你可以选择以下两种方式:

      决定不合并。这时,唯一要做的就是重置index到HEAD节点。git merge --abort用于这种情况。
      解决冲突。Git会标记冲突的地方,解决完冲突的地方后使用git add加入到index中,然后使用git commit产生合并节点。
      你可以用以下工具来解决冲突:
      使用合并工具。git mergetool将会调用一个可视化的合并工具来处理冲突合并。
      查看差异。git diff将会显示三路差异(三路合并中所采用的三路比较算法)。
      查看每个分支的差异。git log --merge -p <path>
      将会显示HEAD版本和MERGE_HEAD版本的差异。
      查看合并前的版本。git show :1:文件名显示共同祖先的版本,git show :2:文件名显示当前分支的HEAD版本,git show :3:文件名显示对方分支的MERGE_HEAD版本。
      git merge test 如果有冲突,想撤销就 git reset --hard或者 git reset --hard head 就能还原到未合并前

    衍合

    • git rebase master 衍合,把 从当前分支和master的最近祖先开始到当前分支的 所有提交节点 合到master之后,就是换基
    • rebase介绍

    区别

    • git diff 当前工作区 与 暂存区 比较 显示add之后的变化
    • git diff --cached 或者 git diff --staged 是比较的暂存区与库存head的 ,显示的是如果要commit后,提交的新变化
    • git diff head 显示的是当前改变 与库存head的变化,包括 add的和add之后的改变 的汇总

    关联

    • git clone https://github.com/wsxx111/thisStudy.git 从远端拉下来(从远端到本地的一种关联)
    • git remote add origin https://github.com/wsxx111/GGG.git 本地建立一个远端的仓库关联 注意地址要对,可以在github先建一个GGG仓库 (从本地到远端的一种关联)

    拉取

    • git fetch 这将更新git remote 中所有的远程仓库 所包含分支的最新提交id, 将其记录到.git/FETCH_HEAD文件中,不包括文件
    • git fetch origin 这将名称为origin 的远程仓库上的所有branch的最新提交id,将其记录。
    • git fetch origin dev 这将这将名称为origin的远程仓库上的分支dev
    • git pull origin master 拉取远端到本地,并与本地的东西合并

      相当于执行了两步
      git fetch origin master 拉取远端到本地,不合并
      然后 git merge origin master
      这两步就是 git pull origin master 的操作

    • pull即 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。

    推送

    • git push -u origin dev 把当前的分支与远段的dev分支关联,一般用于首次推送

      或者 git push --set-upstream origin dev 这个也可以 之后的推送就可以使用 git push 就行了,同时更新的时候也可以git pull 或者 git fetch 就行了,因为已经关联了。

      也可以git branch --set-upstream dev origin/dev 实现本地和远端的分支关联

    • git push origin dev 通用的推送,把当前分支推送到远端的dev分支

    其他(不想写了)

    • git stash
    • git stashlist
    • git stash apply
    • git stash pop
    • git rm test.txt
    • git merge --no-ff -m "merged bug fix 101" issue-101
    • git remote rm origin 删除远程仓库
    • git remote add origin git@github.com:wsxx111/GGG.git
    • git tag v1.0
    • git tag
    • git show v0.9
    • git tag -d v0.1 删除一个本地标签
    • git push origin v1.0 推送一个本地标签
    • git push origin --tags 一次性推送全部尚未推送到远程的本地标签
    
    # 删除 untracked files 
    git clean -f 
      
    
    # 连 untracked 的目录也一起删掉 
    git clean -fd 
      
    
    # 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的) 
    git clean -xfd 
      
    
    # 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删 
    git clean -nxfd搜索 
    git clean -nf 
    git clean -nfd

  • 相关阅读:
    [美团 CodeM 初赛 Round A]最长树链
    [POI2005]Toy Cars
    [CodePlus2017NOV]晨跑
    [JLOI2011]不重复数字
    [NEERC2007][SHOI2008]Cactus Reloaded
    [NOI2015]软件包管理器
    [HAOI2015]树上操作
    CF1097D Makoto and a Blackboard
    Luogu P5339 [TJOI2019]唱、跳、rap和篮球
    HNCPC2019H 有向图
  • 原文地址:https://www.cnblogs.com/wwkk/p/7535661.html
Copyright © 2020-2023  润新知