git config

Git 一共有3个配置文件:

  1. 仓库级的配置文件:在仓库的 .git/.gitconfig,该配置文件只对所在的仓库有效。
  2. 全局配置文件:Mac 系统在 ~/.gitconfig,Windows 系统在 C:\Users\<用户名>\.gitconfig
  3. 系统级的配置文件:在 Git 的安装目录下(Mac 系统下安装目录在 /usr/local/git)的 etc 文件夹中的 gitconfig
    1. # 查看配置信息
    2. # --local:仓库级,--global:全局级,--system:系统级
    3. $ git config <--local | --global | --system> -l
    4. # 查看当前生效的配置信息
    5. $ git config -l
    6. # 编辑配置文件
    7. # --local:仓库级,--global:全局级,--system:系统级
    8. $ git config <--local | --global | --system> -e
    9. # 添加配置项
    10. # --local:仓库级,--global:全局级,--system:系统级
    11. $ git config <--local | --global | --system> --add <name> <value>
    12. # 获取配置项
    13. $ git config <--local | --global | --system> --get <name>
    14. # 删除配置项
    15. $ git config <--local | --global | --system> --unset <name>
    16. # 配置提交记录中的用户信息
    17. $ git config --global user.name <用户名>
    18. $ git config --global user.email <邮箱地址>
    19. # 更改Git缓存区的大小
    20. # 如果提交的内容较大,默认缓存较小,提交会失败
    21. # 缓存大小单位:B,例如:524288000(500MB)
    22. $ git config --global http.postBuffer <缓存大小>
    23. # 调用 git status/git diff 命令时以高亮或彩色方式显示改动状态
    24. $ git config --global color.ui true
    25. # 配置可以缓存密码,默认缓存时间15分钟
    26. $ git config --global credential.helper cache
    27. # 配置密码的缓存时间
    28. # 缓存时间单位:秒
    29. $ git config --global credential.helper 'cache --timeout=<缓存时间>'
    30. # 配置长期存储密码
    31. $ git config --global credential.helper store

    git clone

    从远程仓库克隆,相当于下载一个版本到本地。
    1. # 默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下
    2. $ git clone <远程仓库的网址>
    3. # 指定本地仓库的目录
    4. $ git clone <远程仓库的网址> <本地目录>
    5. # -b 指定要克隆的分支,默认是master分支
    6. $ git clone <远程仓库的网址> -b <分支名称> <本地目录>

    git init

    初始化项目所在目录,初始化后会在当前目录下出现一个名为 .git 的目录。
    1. # 初始化本地仓库,在当前目录下生成 .git 文件夹
    2. $ git init

    git mv

    重命名文件或者文件夹。
    1. # 重命名指定的文件或者文件夹
    2. $ git mv <源文件/文件夹> <目标文件/文件夹>

    git rm

    删除文件或者文件夹。
    1. # 移除跟踪指定的文件,并从本地仓库的文件夹中删除
    2. $ git rm <文件路径>
    3. # 移除跟踪指定的文件夹,并从本地仓库的文件夹中删除
    4. $ git rm -r <文件夹路径>
    5. # 移除跟踪指定的文件,在本地仓库的文件夹中保留该文件
    6. $ git rm --cached

    git status

    查看本地仓库的状态。
    1. # 查看本地仓库的状态
    2. $ git status
    3. # 以简短模式查看本地仓库的状态
    4. # 会显示两列,第一列是文件的状态,第二列是对应的文件
    5. # 文件状态:A 新增,M 修改,D 删除,?? 未添加到Git中
    6. $ git status -s

    git add

    把要提交的文件的信息添加到暂存区中。当使用 git commit 时,将依据暂存区中的内容来进行文件的提交。
    1. # 把指定的文件添加到暂存区中
    2. $ git add <文件路径>
    3. # 添加所有修改、已删除的文件到暂存区中
    4. $ git add -u [<文件路径>]
    5. $ git add --update [<文件路径>]
    6. # 添加所有修改、已删除、新增的文件到暂存区中,省略 <文件路径> 即为当前目录
    7. $ git add -A [<文件路径>]
    8. $ git add --all [<文件路径>]
    9. # 查看所有修改、已删除但没有提交的文件,进入一个子命令系统
    10. $ git add -i [<文件路径>]
    11. $ git add --interactive [<文件路径>]

    git commit

    将暂存区中的文件提交到本地仓库中。
    1. # 把暂存区中的文件提交到本地仓库,调用文本编辑器输入该次提交的描述信息
    2. $ git commit
    3. # 把暂存区中的文件提交到本地仓库中并添加描述信息
    4. $ git commit -m "<提交的描述信息>"
    5. # 把所有修改、已删除的文件提交到本地仓库中
    6. # 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"
    7. $ git commit -a -m "<提交的描述信息>"
    8. # 修改上次提交的描述信息
    9. $ git commit --amend

    git remote

    操作远程库。
    1. # 列出已经存在的远程仓库
    2. $ git remote
    3. # 列出远程仓库的详细信息,在别名后面列出URL地址
    4. $ git remote -v
    5. $ git remote --verbose
    6. # 添加远程仓库
    7. $ git remote add <远程仓库的别名> <远程仓库的URL地址>
    8. # 修改远程仓库的别名
    9. $ git remote rename <原远程仓库的别名> <新的别名>
    10. # 删除指定名称的远程仓库
    11. $ git remote remove <远程仓库的别名>
    12. # 修改远程仓库的 URL 地址
    13. $ git remote set-url <远程仓库的别名> <新的远程仓库URL地址>

    git push

    把本地仓库的提交推送到远程仓库。
    1. # 把本地仓库的分支推送到远程仓库的指定分支
    2. $ git push <远程仓库的别名> <本地分支名>:<远程分支名>
    3. # 删除指定的远程仓库的分支
    4. $ git push <远程仓库的别名> :<远程分支名>
    5. $ git push <远程仓库的别名> --delete <远程分支名>

    git fetch

    从远程仓库获取最新的版本到本地的 tmp 分支上。
    1. # 将远程仓库所有分支的最新版本全部取回到本地
    2. $ git fetch <远程仓库的别名>
    3. # 将远程仓库指定分支的最新版本取回到本地
    4. $ git fetch <远程主机名> <分支名>

    git merge

    合并分支。
    1. # 把指定的分支合并到当前所在的分支下
    2. $ git merge <分支名称>

    git pull

    从远程仓库获取最新版本并合并到本地。
    首先会执行 git fetch,然后执行 git merge,把获取的分支的 HEAD 合并到当前分支。
    1. # 从远程仓库获取最新版本。
    2. $ git pull

    git branch

    操作 Git 的分支命令。
    1. # 列出本地的所有分支,当前所在分支以 "*" 标出
    2. $ git branch
    3. # 列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出
    4. $ git branch -v
    5. # 创建新分支,新的分支基于上一次提交建立
    6. $ git branch <分支名>
    7. # 修改分支名称
    8. # 如果不指定原分支名称则为当前所在分支
    9. $ git branch -m [<原分支名称>] <新的分支名称>
    10. # 强制修改分支名称
    11. $ git branch -M [<原分支名称>] <新的分支名称>
    12. # 删除指定的本地分支
    13. $ git branch -d <分支名称>
    14. # 强制删除指定的本地分支
    15. $ git branch -D <分支名称>

    git checkout

    检出命令,用于创建、切换分支等。
    1. # 切换到已存在的指定分支
    2. $ git checkout <分支名称>
    3. # 创建并切换到指定的分支,保留所有的提交记录
    4. # 等同于 "git branch" 和 "git checkout" 两个命令合并
    5. $ git checkout -b <分支名称>
    6. # 创建并切换到指定的分支,删除所有的提交记录
    7. $ git checkout --orphan <分支名称>
    8. # 替换掉本地的改动,新增的文件和已经添加到暂存区的内容不受影响
    9. $ git checkout <文件路径>

    git cherry-pick

    把已经提交的记录合并到当前分支。
    1. # 把已经提交的记录合并到当前分支
    2. $ git cherry-pick <commit ID>

    git reset

    还原提交记录。
    1. # 重置暂存区,但文件不受影响
    2. # 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
    3. # 没有指定 commit ID 则默认为当前 HEAD
    4. $ git reset [<文件路径>]
    5. $ git reset --mixed [<文件路径>]
    6. # 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
    7. $ git reset <commit ID>
    8. $ git reset --mixed <commit ID>
    9. # 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
    10. # 相当于调用 "git reset --mixed" 命令后又做了一次 "git add"
    11. $ git reset --soft <commit ID>
    12. # 将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了
    13. $ git reset --hard <commit ID>

    解决git远程和本地push冲突

  • git stash
  • git pull
  • git stash pop

通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git pull:拉取服务器上的代码;
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。