常见的git使用命令,以及配置

一、git基本概念及说明

1. git跟踪并管理的是文件的修改,而非文件

       修改就是:新增一行,删除一行,更改某个字符甚至创建新文件等

       每次的修改如果不 add 到暂存区,将不会被 commit 提交到仓库的

2. 工作区(Working Directory):就是当前你的版本库(.git文件夹)所在目录

3. 版本库(Repository):工作区有个隐藏的".git"目录,这个目录不算工作区,而是Git的版本库

4. 版本库:

        暂存区:称为stage或index

                git add file 即为将文件的修改添加到暂存区

        分支:称为branch,git为我们创建第一个分支是master

              git commit 即为将文件提交到当前HEAD指向的分支

        HEAD: 指向当前分支版本的指针

5. 自己本地创建的分支,别人是看不见的

6. 通常情况下合并分支,Git会用"Fast forward"模式,这种模式下被合并的删除分支后,会丢掉分支信息

       如果,强制禁止"Fast forward"模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

       强制禁止"Fast forward":

            git merge --no-ff -m 'merge info' branch_name

7. git config --global core.autocrlf false    // 禁止GIT自动换行

       git config --global core.safecrlf true     // 提交时强制检测换行符

二、安装完成后的基本设置

1. git配置命令

    git config --list 查看本机git配置

git config --global user.name "Your Name"    设置全局的用户名

    git config --global user.email "email@example.com"   设置全局的Email

    git config --global color.ui true   bash显示颜色

git config --global core.autocrlf true 提交时将CRLF转换为LF,迁出代码将LF转换为CRLF

ssh-keygen -t rsa -C “邮箱”   C盘生成ssh认证

2. 初始化版本库(仓库)

    git init

3. 将文件的修改添加到版本库的暂存区(stage/index)

git add file_name.ext

git add .

4. 提交暂存区(stage/index)的所有修改内容到仓库(当前分支)

    git commit -m "本次提交简介,最好是文件或功能的简介,因为会显示在github文件描述栏里"

5. 查看版本库的当前状态

    git status

6. diff 查看文件

    git diff file_name.ext

7. 查看日志(历史记录)

    git log

    git log --pretty=online : 单行显示

8. 查看每一次提交或改变版本库的命令(查看历史提交版本)

    git reflog

9. Git版本号的表示

    git用SHA1算法计算出来的非常大的数字,用16进制表示

    git用HEAD表示当前最新提交的版本

    git的上一个版本就是HEAD^,上上一个版本就是HEAD^^,依次类推

        也可这样表示往上100个版本: HEAD~100

10. 版本回退(可以理解为重新设置HEAD指针的指向)

    git reset --hard HEAD^

    git reset --hard commit_id(版本号)

11. 丢弃工作区(所有文件或某文件)的修改

        分两种情况:

            a. 修改未被提交到暂存区(stage/index),撤销修改将回到和当前branch版本库一模一样的状态

            b. 修改已经提交到暂存区(stage/index)后,又进行了部分修改(此修改未提交暂存区),

               撤销修改将回到添加暂存区后的状态

            总之,就是让这个文件回到最近一次git commit 或 git add 后的状态,即,只是丢弃工作区的修改。其实就是用版本库或暂存区里的文件替换工作区的文件

    git checkout -- file_name.ext

12. 撤销已经提交暂存区的更改,重新放回工作区。

    其实就是将暂存区的文件用当前branch所在的版本库替换

    用HEAD表示当前branch的最新版本

    git reset HEAD file_name.ext

13. 删除文件(一般分三步)

     step 1:在资源管理器下直接删除文件,或 rm file

     step 2git rm file

     step 3git commit -m 'delete info'

14. 创建分支

    a. git checkout -b branch_name        创建并切换到新建的分支

    b. git branch branch_name             创建新分支,并未切换

    注:

        git checkout -b branch_name 相当于 git branch branch_name git checkout branch_name两条命令

15. 查看分支

    git branch

    git branch -a : -a参数将会同时列出远端和本地分支

    注:当前分支前面会标一个星号(*)

16. 切换分支

    git checkout branch_name    切换到branch_name分支

17. 合并分支

    git merge branch_name   将branch_name分支合并到当前分支

    注:合并模式分两种

        a. 快进模式:直接将当前分支的指针指向branch_name分支的当前提交

        b TODO.....

18. 删除分支

        a. 被删除分支已经被合并

            git branch -d branch_name

        b. 被删除分支未被合并(强行删除)

            git branch -D branch-name

            注:未合并分支删除后将丢失修改

19. 解决冲突

    a. 当合并分支时,会发生冲突,这样合并分支就不会是“快进模式”合并了

    b. Git用 <<<<<<< HEAD, =======, >>>>>>> branch_name 来标记出不同分支的内容

    c. 然后手工编辑冲突

    注:当Git无法自动合并分支时,就必须首先解决冲突,然后再提交,合并才能完成。

20. 查看分支合并情况

    git log --graph --pretty=oneline --abbrev-commit

        注: --graph 伪图形化查看分支合并图

             --pretty=oneline 单行省略显示(将不显示提交者和提交时间信息)

             --abbrev-commit  缩略显示版本ID

21. 保存当前工作现场(即,保存储藏)

    当有其它分支需要马上开发(比如bug修复分支),而当前的分支工作并未完成,不能提交时,可以使用保存工作现场,等以后恢复现场后再继续工作

    修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除

    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

    保存现场:git stash

    查看现场:git stash list

    恢复现场:a. git stash apply

                 此方法恢复现场后stash的内容并不会被删除,需要 git stash drop 手工删除

              b. git stash pop

                 恢复现场的同时删除stash内容

    删除现场:git stash drop

    注:可多次stash,恢复的时候,先用 git stash list 查看,然后指定恢复的stash,用命令:

            git stash apply stash@{0}

            git stash pop stash@{0}

22. 本地仓库关联远程仓库

     git remote add origin git@github.com:wangnanphp/learngit.git

     注:origin为远程库的名称,也可以叫别的名子,但origin更见名知意

23. 推送本地仓库指定分支到远程仓库

     git push

     git push <远端仓库> <本地仓库的分支>

     git push -u orgin master

     注:git push 直接将当前分支推送到远程

         -u <远端> <分支>   (一般用于第一次推送,以后推送可以简化命令)

            推送本地master分支的同时还将本地master和远程master关联

24. 从远程库克隆

    git clone git@github.com:wangnanphp/learngit.git

    注:默认克隆远程库的情况下,只能看到克隆到的本地master分支

        如果要克隆其他分支,请看27条(分支抓取)

25. 查看远程库信息

    git remote

    git remote -v 显示详细信息

    注:详细信息中显示的 "fetch" 代表可以拉取(抓取)的地址,"push" 代表可以推送的地址

        如果没有推送权限,将看不到 "push" 的地址

26. 推送本地分支

    将指定分支上的所有本地提交(commit),推送到远程库

    git push origin_depository branch_name

        orgin_depository:远程库

        branch_name:本地分支

        eg:git push origin master

27. 获取(抓取)远程分支修改

    git pull

    注:必须指定当前分支与远程分支的链接关系,否则 git pull 会失败

        git pull 回来的远端修改在没有冲突的情况下会自动合并到本地分支

        如果远端的内容和本地的内容有冲突,则需要手工解决冲突,再commit,再push

28. 创建远程分支到本地(分支抓取)

    抓取远程分支到本地,并切换到

    git checkout -b local_branch origin_depository/origin_branch

        eg:git checkout -b dev origin/dev

    注:此操作只会在本地创建和远程分支对应的分支,

29. 设置本地分支与远程分支之间的链接关系(注:此参数已经弃用,有两个替代参数)

    git branch --set-upstream local_branch origin_depository/branch_name

        eg:git branch --set-upstream dev origin/dev

    // 一个替代的:

    git branch --set-upstream-to origin_depository/branch_name

    关联本地当前分支到远端 origin_depository/branch_name 分支

30. 创建标签

    git tag tag_name

        eg: git tag v0.1

    git tag tag_name commit_id  用指定 commit_id 创建tag

    git tag -a tag_name -m "tag info"   创建带说明信息的tag  -a:tag_name  -m "tag_info"

    git tag -s tag_name -m "tag info" commit_id    -s 用私钥签名一个标签

    注:默认标签是打在当前分支的最新commit上(HEAD),也可以给指定commit_id打标签

        发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。

        -s 签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错

31. 查看所有标签

    git tag

    注:标签不是按时间顺序,而是按字母顺序排列的

32. 查看标签信息

    git show tag_name

33. 删除标签

    git tag -d tag_name

    注:因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除

34. 推送本地标签

    git push origin tag_name    推送单个标签

    git push origin --tags      一次性推送全部尚未推送远程的本地标签

35. 推送过远程的标签删除

    a. 先删除本地

        git tag -d tag_name

    b. 再删除远程

        git push origin : refs/tags/tag_name

36. 别名配置

git config --global alias.st status

查看远程分支的git路径

git remote -v

查看当前版本的状态(是否修改)

git status

查看日志

git log

查看n条日志

git log -n

查阅最近修改的文件

git log --stat

 

查看本地分支:

git branch

查看远地分支:

git branch -r

查看本地分支和远程分支

git branch -a

查看各个分支最后一次提交

git branch -v

查看两个分支

git diff branch_a branch_b

创建本地分支

git branch branch_name

切换分支

git checkout branch_name

创建并切换本地分支

git checkout -b branch_name

删除文件,并把它从git的仓库管理系统中移除

git rm file

强制删除文件,并把它从git的仓库管理系统中移除

git rm -f file

删除文件夹folder,并把它从git的仓库管理系统中移除。

git rm -r folder

删除本地分支

git branch -d | -D branch_name  #-D代表强制删除

删除远程分支

git push origin --delete branch_name

推送分支

git push origin branch_name

push本地分支代码到远端服务器

git push branch_name origin/branch_name

合并分支

git merge branch_name # 将branch_name分支合并到当前分支中去

重命名分支

git branch -m|-M oldbranch_name newbranch_name #-M用来强制重命名

取远程分支并分化一个新分支(With the remote branches in hand, you now need to check out the branch you are interested in, giving you a local working copy)

git checkout -b branch_name origin/branch_name

添加文件到分支

git add file

提交文件

git commit -m '注释'

添加并提交到分支

git commit -am '注释'

显示本地分支和服务器分支的映射关系

git branch -vv

合并本地master分支到当前分支,比如当前处于dev分支,则把master上的代码merge到dev分支上

git merge master

合并远程master分支到当前分支

git merge origin/master

强制回滚命令

git reset --hard b188005656968504c81eefe202e0a04205803e51(某次提交的号)

提交提示编码问题

 常见问题:

warning: Your console font probably doesn't support Unicode. If you experience strange characters in the output, consider switching to a TrueType font such as Lucida Console!

解决办法:

$ git config --global core.autocrlf true

0. git基本概念
    a. git跟踪并管理的是文件的修改,而非文件
       修改就是:新增一行,删除一行,更改某个字符甚至创建新文件等
       每次的修改如果不 add 到暂存区,将不会被 commit 提交到仓库的
    b. 工作区(Working Directory):就是当前你的版本库(.git文件夹)所在目录
    c. 版本库(Repository):工作区有个隐藏的".git"目录,这个目录不算工作区,而是Git的版本库
    d. 版本库:
        暂存区:称为stageindex
                git add file 即为将文件的修改添加到暂存区
        分支:称为branchgit为我们创建第一个分支是master
              git commit 即为将文件提交到当前HEAD指向的分支
        HEAD: 指向当前分支版本的指针
    e. 自己本地创建的分支,别人是看不见的
    f. 通常情况下合并分支,Git会用"Fast forward"模式,这种模式下被合并的删除分支后,会丢掉分支信息
       如果,强制禁止"Fast forward"模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
       强制禁止"Fast forward":
            git merge --no-ff -m 'merge info' branch_name
    g. git config --global core.autocrlf false    // 禁止GIT自动换行
       git config --global core.safecrlf true     // 提交时强制检测换行符

1. 安装完成后的基本设置
    git config --global user.name "Your Name"    设置全局的用户名
    git config --global user.email "email@example.com"   设置全局的Email
    git config --global color.ui true   bash显示颜色
    git config --global core.autocrlf true 提交时将CRLF转换为LF,迁出代码将LF转换为CRLF
2.
初始化版本库(仓库)
    git init 
3. 将文件的修改添加到版本库的暂存区(stage/index)
    git add file_name.ext
4.
提交暂存区(stage/index)的所有修改内容到仓库(当前分支)
    git commit -m "本次提交简介,最好是文件或功能的简介,因为会显示在github文件描述栏里"
5.
查看版本库的当前状态
    git status
6. diff
查看文件
    git diff file_name.ext
7.
查看日志(历史记录)
    git log
    git log --pretty=online : 单行显示
8. 查看每一次提交或改变版本库的命令(查看历史提交版本)
    git reflog
9. Git
版本号的表示
    gitSHA1算法计算出来的非常大的数字,16进制表示
    gitHEAD表示当前最新提交的版本
    git的上一个版本就是HEAD^,上上一个版本就是HEAD^^,依次类推
        也可这样表示往上100个版本: HEAD~100
10.
版本回退(可以理解为重新设置HEAD指针的指向)
    git reset --hard HEAD^
    git reset --hard commit_id(版本号)
11.
丢弃工作区(所有文件或某文件)的修改
        分两种情况:
            a. 修改未被提交到暂存区(stage/index),撤销修改将回到和当前branch版本库一模一样的状态
            b. 修改已经提交到暂存区(stage/index)后,又进行了部分修改(此修改未提交暂存区)
               撤销修改将回到添加暂存区后的状态
            总之,就是让这个文件回到最近一次git commit git add 后的状态,即,只是丢弃工作区的修改。其实就是用版本库或暂存区里的文件替换工作区的文件
    git checkout -- file_name.ext
12.
撤销已经提交暂存区的更改,重新放回工作区。
    其实就是将暂存区的文件用当前branch所在的版本库替换
    HEAD表示当前branch的最新版本
    git reset HEAD file_name.ext
13.
删除文件(一般分三步)
     step 1:在资源管理器下直接删除文件,或 rm file
     step 2git rm file
     step 3git commit -m 'delete info'
14.
创建分支
    a. git checkout -b branch_name        创建并切换到新建的分支
    b. git branch branch_name             创建新分支,并未切换
    注:
        git checkout -b branch_name 相当于 git branch branch_name git checkout branch_name两条命令
15. 查看分支
    git branch
    git branch -a : -a参数将会同时列出远端和本地分支
    注:当前分支前面会标一个星号(*)
16.
切换分支
    git checkout branch_name    切换到branch_name分支
17. 合并分支
    git marge branch_name   branch_name分支合并到当前分支
    注:合并模式分两种
        a. 快进模式:直接将当前分支的指针指向branch_name分支的当前提交
        b TODO.....
18.
删除分支
        a. 被删除分支已经被合并
            git branch -d branch_name
        b. 被删除分支未被合并(强行删除)
            git branch -D branch_name
            注:未合并分支删除后将丢失修改
        c. 删除远程分支:
           git push origin --delete branch_name

19.
解决冲突
    a. 当合并分支时,会发生冲突,这样合并分支就不会是“快进模式”合并了
    b. Git <<<<<<< HEAD, =======, >>>>>>> branch_name 来标记出不同分支的内容
    c. 然后手工编辑冲突
    注:当Git无法自动合并分支时,就必须首先解决冲突,然后再提交,合并才能完成。
20. 查看分支合并情况
    git log --graph --pretty=oneline --abbrev-commit
        注: --graph 伪图形化查看分支合并图
             --pretty=oneline 单行省略显示(将不显示提交者和提交时间信息)
             --abbrev-commit  缩略显示版本ID
21.
保存当前工作现场(,保存储藏)
    当有其它分支需要马上开发(比如bug修复分支),而当前的分支工作并未完成,不能提交时,可以使用保存工作现场,等以后恢复现场后再继续工作
    修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除
    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
    保存现场:git stash
    查看现场:git stash list
    恢复现场:a. git stash apply
                 此方法恢复现场后stash的内容并不会被删除,需要 git stash drop 手工删除
              b. git stash pop
                 恢复现场的同时删除stash内容
    删除现场:git stash drop 
    注:可多次stash,恢复的时候,先用 git stash list 查看,然后指定恢复的stash,用命令:
            git stash apply stash@{0}
            git stash pop stash@{0}
22.
本地仓库关联远程仓库
     git remote add origin git@github.com:wangnanphp/learngit.git
     注:origin为远程库的名称,也可以叫别的名子,但origin更见名知意
23. 推送本地仓库指定分支到远程仓库
     git push
     git push <远端仓库> <本地仓库的分支>
     git push -u orgin master
     注:git push 直接将当前分支推送到远程
         -u <远端> <分支>   (一般用于第一次推送,以后推送可以简化命令)
            推送本地master分支的同时还将本地master和远程master关联
24. 从远程库克隆
    git clone git@github.com:wangnanphp/learngit.git
    注:默认克隆远程库的情况下,只能看到克隆到的本地master分支
        如果要克隆其他分支,请看27(分支抓取)
25.
查看远程库信息
    git remote
    git remote -v 显示详细信息
    注:详细信息中显示的 "fetch" 代表可以拉取(抓取)的地址,"push" 代表可以推送的地址
        如果没有推送权限,将看不到 "push" 的地址
26. 推送本地分支
    将指定分支上的所有本地提交(commit),推送到远程库
    git push origin_depository branch_name
        orgin_depository:远程库
        branch_name:本地分支
        eggit push origin master
27.
获取(抓取)远程分支修改
    git pull
    注:必须指定当前分支与远程分支的链接关系,否则 git pull 会失败
        git pull 回来的远端修改在没有冲突的情况下会自动合并到本地分支
        如果远端的内容和本地的内容有冲突,则需要手工解决冲突,再commit,再push
28.
创建远程分支到本地(分支抓取)
    抓取远程分支到本地,并切换到
    git checkout -b local_branch origin_depository/origin_branch
        eggit checkout -b dev origin/dev
    注:此操作只会在本地创建和远程分支对应的分支,



29. 设置本地分支与远程分支之间的链接关系(注:此参数已经弃用,有两个替代参数)
    git branch --set-upstream local_branch origin_depository/branch_name
        eggit branch --set-upstream dev origin/dev

    // 一个替代的:
    git branch --set-upstream-to origin_depository/branch_name
    关联本地当前分支到远端 origin_depository/branch_name 分支
30. 创建标签
    git tag tag_name
        eg: git tag v0.1
    git tag tag_name commit_id  用指定 commit_id 创建tag
    git tag -a tag_name -m "tag info"   创建带说明信息的tag  -atag_name  -m "tag_info"
    git tag -s tag_name -m "tag info" commit_id    -s 用私钥签名一个标签
    注:默认标签是打在当前分支的最新commit(HEAD),也可以给指定commit_id打标签
        发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。
        -s 签名采用PGP签名,因此,必须首先安装gpgGnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错
31. 查看所有标签
    git tag
    注:标签不是按时间顺序,而是按字母顺序排列的
32. 查看标签信息
    git show tag_name
33.
删除标签
    git tag -d tag_name
    注:因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
34. 推送本地标签
    git push origin tag_name    推送单个标签
    git push origin --tags      一次性推送全部尚未推送远程的本地标签
35. 推送过远程的标签删除
    a. 先删除本地
        git tag -d tag_name
    b. 再删除远程
        git push origin : refs/tags/tag_name
36.
别名配置
    git config --global alias.st status



查看远程库信息,使用git remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值