git整理

  • 本地仓库与远程仓库建立连接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    git init
    git add
    git commit -m
    -----------
    本地仓库与远程仓库建立连接
    git remote add origin(仓库名字) https:// ....
    git remote set-url origin git@github //更改远程仓库地址的链接,推荐用SSH协议
    ---------
    本地分支与远程分支建立连接
    git push -u origin master (第一次都要写-u)
返回历史版本

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

1
2
3
4
- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
- 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
git log --pretty=oneline,让历史版本更加简洁明了
- 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

git status命令可以让我们时刻掌握仓库当前的状态

git diff顾名思义就是查看difference

  • git diff HEAD -- fileName 查看工作区版本库 里面最新版本中的区别,(修改后但是没有add和commit)
撤销

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

  • git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用命令git reset --hard commit_id,不过前提是没有推送到远程库。

删除

工作区删除文件rm xxx,会导致工作区和版本库(已经add或者更进一步的已经commit)不一致,用git status可以查看到,如果要同时删除版本库中的xxx文件,用git rm xxx(此时已经在版本库中删除),然后git commit -m “remove xxx”来提交最新的状态。

如果想要在工作区恢复:

  • 已经add,但是未commit,可以git checkout -- xxx (即暂存区覆盖掉工作区)
  • 已经commit,可以先git reset HEAD xxx ,然后 git checkout -- xxx
创建分支与合并
  • git checkout -b dev 创建并切换到分支dev上

    1
    2
    3
    4
    # 等同于
    git branch dev # 创建分支
    git checkout dev # 切换分支
    git branch # 查看当前分支
  • 解决冲突

    当分支提交完,切换到主分支master并提交完

    git merge dev合并dev分支到当前的分支(快速合并:Fast-forward)

    • 自己打开文件然后修改冲突文件,修改完后在git addgit commit
    • git merge --no-ff -m"xxxx" dev :不使用快速合并,修改冲突文件并提交

    git log --graph 可以查看分支合并图

    git branch -d dev 删除分支dev

    • git branch -D dev 强行删除还没有合并过的分支(一般情况下分支只有合并后才能被删除)
  • 隐藏分支

    如果分支上还没有commit,那么可以用git stash 把修改的内容隐藏起来去做其他的事情

    git stash list 查看隐藏的列表

    git stash pop 恢复之前隐藏的内容,同时把stash的内容也删除了

    1
    2
    3
    #相当于以下两个步骤
    git stash apply 恢复
    git stash drop 删除stash的内容
远程分支
  • git remote :显示远程仓库的信息,远程仓库默认名为origin

    • git remote -v :显示更加详细的远程仓库信息
  • 推送分支: git push origin master :把本地的master分支推送到远程分支

    git push origin dev :把本地的dev分支推送到远程

  • 抓取分支:别人clone你的git文件后,一般只能看到本地master分支,看不到其他分支,此时需要创建远程origin的dev分支到本地,即git checkout -b dev origin/dev ,现在修改后可以用上述步骤git push origin dev 来推送分支了

  • 如果你也修改了dev想要推送,此时需要解决冲突后再推送

    • 先制定本地dev分支与远程origin/dev分支的链接

      git branch --set-upstream dev origin/dev

    • 然后git pull 试图与本地的dev合并,但是你也修改了dev分支,所以会有冲突,所以先解决冲突,然后本地提交

    • 然后git push origin dev

创建标签
  • 创建标签:切换到需要打标签的分支上,用git tag <name> ,默认的标签是打在最新提交的commit上面
  • 可以找到历史commit,然后在上面打标签git tag v1.0 6224937
  • git tag -a <tagname> -m "blablabla..." 可以指定标签信息,a是标签名,m是文字说明
  • git tag 查看标签, git show <tagName> 查看详细的标签信息,包括时间,上面m的文字说明
操作标签
  • 删除本地标签 git tag -d v1.0

  • 推送某个标签到远程 git push origin v1.0

    一次性推送 git push origin --tags

  • 从远程删除,先删除本地标签,再推送删除

    • git tag -d v0.9
    • git push origin :refs/tags/v0.9
忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。这时输入git status,不会显示.gitignore里面的文件为提交等信息

配置文件

在.gitconfig文件里面配置

1
2
3
4
5
[alias]
co = checkout
ci = commit
br = branch
st = status

设置公钥

1
cat ~/.ssh/id_rsa.pub //公钥
下面是根据draw.io网站画的指令图