Git——使用总结

本文总结一些可能误解或者需要注意的指令用法


总体概况总结


分支管理

  • 查看本地分支

    1
    git branch
  • 查看所有分支(包括远程)

    1
    git branch -a
  • 删除本地分支

    1
    git branch -d branch_name
  • 删除远程分支

    1
    git push origin :branch_name
    • 将空的东西推送到远程的branch_name分支,也就是删除远程分支
  • 新建本地分支

    1
    git fetch origin master:branch_name
    • fetch将远程分支拉取到本地的Repository中,但不修改本地工作目录,如果本地分支不存在,则新建分支

      1
      git pull origin master:branch_name
    • fetch将远程分支拉取到本地的Repository中,同时修改本地工作目录,如果本地分支不存在,则新建分支

  • 新建远程分支

    1
    git push origin master:branch_name
    • 将本地分支推送到远程,如果branch_name不存在,则新建分支

冲突管理

远程分支和本地分支有不同的commit

  • git pullgit push均产生reject异常
  • 使用下面语句拉取远程分支到本地old分支并合并

    1
    2
    git fetch origin master:old
    git merge old
    • 上面两句等价于
      1
      git pull origin master:old
  • 如果能够快速合并,也就是相同文件没有同时被不同提交修改:

    • 上面的语句将弹出一个合并窗口提示输入合并这个操作(提交)的Comment,按照提示提交保存即可
    • 保存后自动生成一个以刚才的Comment命名的提交
  • 不能快速合并时

    • 上面的语句会提示我们哪些文件有合并冲突需要解决的
    • 我们需要根据提示找到并修改文件中冲突
    • 然后重新提交(像正常提交代码一样即可)
      1
      2
      git add .
      git commit -m " "
  • 合并完成后删除多余分支

    1
    git branch -d old

fetch和pull

1
2
git pull == git fetch + git merge
git pull origin master:old == git fetch origin master:old + git merge old

git diff

  • git diff A B
    • 基于A查看B有何变化
    • 显示时会自动识别为基于a/Ab/B有何变化

文件恢复

恢复本地缓冲区文件到disk

  • 恢复某个文件:git checkout -- xx/xx.py
  • 恢复某个文件夹下所有文件:git checkout -- xx/*

恢复HEAD到缓冲区

  • 仅恢复到缓冲区:git reset or git reset HEAD
  • 不仅恢复到缓冲区,同时恢复到disk: git reset HEAD --hard

从远程拉取一个新分支

  • 从远程拉取分支到本地:git fetch origin xxx
    • 此时使用git branch -a可以看到远程分支引用在本地
    • git fetch origin xxx后,FETCH_HEAD会指向远程xxx分支
      • FETCH_HEAD是个临时的引用,可以对该分支做任意想做的操作,比如此时可用git merge FETCH_HEAD来合并新拉取的分支
  • 创建本地同名新分支:git checkout xxx
    • 必须同名

git clone优化

  • git clone ssh:xxx默认拉取master分支
  • git clone -b yyy ssh:xxx拉取yyy分支

删除本地跟踪远程分支

  • git branch -d --remotes origin/xxx
    • 测试发现:git 1.7.1会报错,git 2.24.3没问题

git pull 和 git push 默认分支设定

  • git branch --set-upstream-to=origin/xxx xxx
    • 经测试:git 1.7.1会报错,git 2.24.3没问题(但git pull不会生效)

添加文件到.gitignore

  • 如果文件已经被添加到Git仓库中(常常出现在一些不规范的项目中),则可以考虑使用以下步骤解决:
    • 假设Git仓库中已经把.DS_Store添加到Git仓库中
    • 首先拉取项目并在.gitignore中添加*.DS_Store
    • 执行git rm --cached *.DS_Store, 从缓冲区中删除所有*.DS_Store文件,但保留本地文件
    • 执行git add .并重新提交