git 常用命令

630 阅读9分钟

GIT常用操作

  • 初始化仓库: git init 在当前目录下创建.git目录,同时当前目录成为一个Git仓库。

  • 下载代码git clone Git仓库url:将http或ssh链接指向的Git仓库拷贝到本地。

  • git add 文件:将文件添加到缓存区,该文件被标记为被追踪。

  • 添加到暂存区git add .:缓存当前目录下所有文件,不包括已删除的文件。 注意,git add只是复制一份当前状态下的该文件到缓存区,该文件之后的修改若不重新git add,则提交的时候,只会将上次git add的缓存提交给仓库。

  • 提交到远程仓库git commit -m "本次提交说明":一次性将缓存区所有文件修改提交到仓库的当前分支。

  • git commit -am "本次提交说明":自动把所有已经跟踪过(经过 git add 提交)的文件缓存,并提交到仓库。常用于跳过git add步骤快速提交。

    【说明】:第一次创建的文件必须通过 git add 提交(文件被标记为被追踪),第二次提交可以直接通过 git commit -am '' 提交,跳过 git add 步骤。

  • git commit --amend "本次提交说明":重新提交。此次提交代替上一次提交的结果。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。 git add是工作区->缓存区,git commit是缓存区->仓库。

  • 查看状态git status:显示当前仓库的最新状态。

  • git status -s:当前仓库的最新状态的简介。

  • git diff:比较工作区和缓存区的不同。

  • git diff --cached:比较缓存区和仓库的不同。

  • git diff 文件:比较指定文件在工作区和缓存区的不同。

  • git diff 文件 --cached:比较指定文件在缓存区和仓库的不同。

  • git show:查看最后一个提交的内容。

  • git show HEAD~1:查看倒数第二个提交的内容。

  • git show 提交版本号:查看指定提交的内容。

  • 查看暂存区提交 git ls-files

    • --cached (-c) 查看暂存区中文件,git ls-files 命令默认是此命令
    • --midified (-m)查看修改的文件
    • --delete (-d)查看删除过的文件
    • --other (-o)查看没有被git跟踪的文件
    • --stage (-s) 显示mode以及文件对应的Blob对象,进而我们可以获取暂存区中对应文件里面的内容。
  • git rm 文件:把文件从版本库中删除,不再跟踪。

  • 将文件从暂存区删除 git rm -f 文件:当文件有未提交的缓存区修改时,直接使用git rm 文件会报错。此时执行此命令可强制将文件从缓存区和版本库中删除。

  • git rm --cached 文件:把文件从版本库中删除,但让文件保留在工作区且不被Git继续跟踪。通常适用于rm文件之后把其添加到.gitignore中。

  • 撤回工作区文件的修改 git checkout 文件:丢弃工作区的修改,丢弃所有(git checkout .)。此文件必须是Git跟踪的。

    【说明】:丢弃工作区的修改(git add .之前的信息修改)

  • 缓存区 -> 工作区 git reset HEAD 文件:丢弃缓存区的修改,回退到工作区。

    【说明】:将文件回退到 执行 git add .命令之前的状态。

  • 本地仓库 -> 缓存区 git reset --soft head^:丢弃本地仓库的修改,回退到缓存区。

    【说明】:

    1. 当执行 git add . 、 git commit -m '',会把当前文件提交到本地仓库,然后执行 git reset --soft head^ ,会将本次提交在本地仓库的提交记录(git log --oneline)删除并回退到缓存区状态(git status)。head^ == HEAD~1 本地仓库(HEAD -> master)指针回退到上一个版本

      reset --soft HEAD~1.png

    2. 如果此时 HEAD -> master, origin/master 指向同一个版本,然后执行 git reset --soft head^。

      image.png 此时的结果会使得 本地仓库的代码版本低于远程仓库的代码版本。 image.png 这个错误就是开发中常遇到的错误,可以通过 git pull 拉取远程分支代码。 image.png

  • 回退上一次commit状态 git reset --hard head^:重置所有文件到上次commit的状态。

    【说明】:执行回滚操作,本地仓库的版本会指向上一次提交的版本号。 image.png 但此时远程仓库和本地仓库的指针会指向不同的版本,会再次出现报错提示: image.png 可以执行 git push --force origin master 强制提交: image.png

  • git reset --hard HEAD~1:将当前分支重置为倒数第2个版本。

    【说明】: image.png

  • 重置到指定版本 git reset --hard 提交版本号:将当前分支重置为指定版本。

  • 详细日志信息 git log:显示从最近到最远的提交日志。包含每个提交的SHA1校验和、作者的名字和邮箱、提交时间以及提交说明等。

  • 简要日志信息 git log --oneline:git log的简要版

    【说明】: image.png

  • git log --decorate:不仅输出git log的信息,还带标签等额外信息。

  • git log --graph 不仅输出git log的信息,还可查看当前分支什么时候出现了分支、合并。

  • git log 分支名:查看指定分支的提交日志。

  • git log 要查看的分支名branchA ^要忽略的分支名branchB:查看branchA的日志信息(排除branchB的信息)

  • 查看所有分支操作日志 git reflog : 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。

  • git tag:查看所有标签。注意:标签不是按时间列出,而是按字母排序。

  • git show <tag-name>:查看指定标签的信息。

  • git tag <tag-name> <commit-id>:在指定版本号上打上标签。

  • git checkout <tag-name>:切换到指定标签。

  • git push --tags:将标签推送给远程仓库。

  • git remote add <shortname> <url>:添加并关联一个远程库。shortname一般为origin。

  • 提交到远程git push <remote-repo-shortname> <local-branch>:将本地分支推送到远程仓库。

  • 拉取分支代码git pull <remote-shortname> <local-branch>:拉取远程仓库最新提交,并合并到指定的本地分支上。

  • git fetch:拉取远程仓库最新提交,但不会自动合并分支。

  • 查看本地分支git branch:列出本地分支列表。当前分支前会标有*号。

  • 查看远程分支git branch -r:列出远程分支列表。

  • 查看所有分支git branch -a:列出所有分支列表。

  • 创建分支 git branch 分支:创建新分支。

  • 删除本地分支git branch -d 分支:删除指定分支。

  • 查看本地分支和最近的提交信息 git branch -v -a:查看所有分支的最后一次提交。

    【说明】: image.png

  • 查看所有分支和最新提交信息 git branch -v -a:查看所有分支的最后一次提交。

    【说明】: image.png

  • 切换分支git checkout 分支:切换到指定分支。

  • 创建本地分支并切换git checkout -b 分支:创建并切换到指定分支。

    【说明】:

        1. 当在 master 修改代码之后,直接执行 git checkout -b dev,
            会将master的代码带到 dev 分支,
            可以将 dev分支的代码(master 分支修改的代码)提交到远程dev仓库,
            然后 git checkout master 后master修改的代码会被删除。
        
        2. 如果在 master 修改代码之后,
            直接或在master分支执行了git add .后,执行 git checkout dev(dev 已经存在,切换到dev)
            此时无法切换需要先提交 master 的修改或 `stash` master的修改。
            解决:1、如果包含新建的文件先进行 git 追踪:git add .
                  2、stash 修改:git stash save '缓存' ()
                  3、切换到 dev :git checkout dev
                  4、取出stash:git stash pop
                  5、提交
            
        3. 如果在 master 修改代码之后,
            并且在master分支执行了git add .,git commit -m ''后,发现开发分支错误(需要在dev分支开发),
            执行 git checkout dev(dev 已经存在,切换到dev),可以成功切换,但是master的代码不能带到dev分支。
            解决:1、回退到暂存区: git reset --soft head^
                  2、stash 修改:git stash save '缓存'
                  3、切换到 dev :git checkout dev
                  4、取出stash:git stash pop
                  5、提交
                  
    
    
  • 创建本地分支并拉取远程分支git checkout -b [本地分支名] origin/[远程分支名]:拉取远程分支代码到本地分支,可直接提交到对应的远程分支。

  • 常用git stash命令:

    (1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

    (2)git stash list  :查看stash了哪些存储

    (3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

    (4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p

    (5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 

    (6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

    (7)git stash drop stash@{num} :丢弃stash@{num}存储,从列表中删除这个存储

    (8)git stash clear :删除所有缓存的stash

  • 合并分支git merge [目标分支] [带合并分支]:将指定分支合并到当前分支上。 可用git status -s查看冲突文件,状态标识为UU。

  • git config --list:列出所有配置信息。

  • git config <key>:检查关键字key的配置。如git config user.name,查看姓名配置。

  • git config --global alias.命令别名 命令:为指定命令配置一个别名,可快速输入命令。

  • git config --global alias.unadd 'reset HEAD':使用git unadd 文件可丢弃指定文件在缓存区的修改。

  • git config --global alias.st status:使用git st代替git status。

  • git config --global alias.co checkout:使用git co代替git checkout。

  • git config --global alias.cm commit:使用git cm代替git commit。

  • git config --global alias.br branch:使用git br代替git branch。

  • git lg:输出高逼格的日志

  • git last:查看最近一条日志

gitignore

配置语法:

  • 以斜杠“/”开头表示目录;
  • 以星号“*”通配多个字符;
  • 以问号“?”通配单个字符
  • 以方括号“[]”包含单个字符的匹配列表;
  • 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;