git命令速记

前言

git是一个很神奇的工具,是由Linux的发起者linus用c语言编写的…
最常用的其实只有十几个命令,其他的可以等到真正的团队合作的时候去复习一下。
在这里记录一下常用命令,想要学习git推荐廖雪峰的Git教程

状态图

git_status.jpg
git_status2.jpg

安装git

基本操作

1
2
git #检测是否已安装git
sudo apt install git

常用(创建项目时)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
第一次在新电脑创建项目,需要添加res公钥到github
cd ~/.ssh/
ssh-keygen -t rsa -C "email@email.com" #双引号中是github的邮箱
讲此目录下生成的rsa公钥复制到github

本地创建新的项目
git init
git remote add origin git@github.com:xxx/xxx.git
git pull git@github.com:xxx/xxx.git
git push -u origin master
git pull

根据远程test_dev分支创建本地test_dev2分支
git fetch origin test_dev:test_dev2
该方式会在本地新建分支x,但是不会自动切换到该本地分支x,
需要git checkout test_dev2 手动切换过去。
采用此种方法建立的本地分支不会和远程分支建立映射关系。

git pull origin master #从远程master分支拉取回来,合并分支到当前分支
git push origin test_dev #push到远程test_dev分支

git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令:
git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
git log -p master origin/master //比较本地的master分支和origin/master分支的差别
git merge origin/master //将origin/master合并到当前分支

git常用命令

  • 创建版本库

    1
    2
    3
    4
    mkdir mygit
    cd mygit
    git init
    ll #可以发现多了一个.git目录
  • 添加到暂存区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    git add readme.txt
    <<<<<<< HEAD
    git add -A
    git add .
    =======
    git add . #提交新文件和修改的文件,不提交被删除的文件
    git add -u #提交修改的和被删除的文件,不提交新文件
    git add -A #提交所有的变化
    ps:git 2.0中git add .改成提交所有变化了
    >>>>>>> 23988b448be5b14582d32cfb274a3ecda09256ac
  • 提交到仓库

    1
    2
    git commit -m "this is a  readme file"
    -m message
  • 查看工作状态

    1
    git status
  • 查看修改内容

    1
    git diff
  • 切换版本

    1
    2
    git reset --hard commit_id
    HEAD是当前版本
  • 查看提交历史

    1
    2
    3
    4
    5
    6
    7
    git log
    git reflog #查看命令历史,可以用于重返未来
    git log --graph #查看分支合并图
    git log --graph --pretty=oneline --abbrev-commit #查看详细log
    终极版:
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    git lg #查看效果
  • 撤销工作区的修改

    1
    2
    git checkout -- readme.txt
    工作区的修改会被还原,还原成暂存区的内容
  • 还原暂存区的内容(用HEAD版本的内容)

    1
    git reset HEAD readme.txt
  • 从版本库中删除文件

    1
    2
    git rm test.txt
    git commit -m "remove test.txt"

远程库管理

  • 关联远程库

    1
    2
    git remote add origin git@github.com:xxxxx/xxxxx
    origin是远程库的名字
  • 将本地库推送到远程库

    1
    2
    3
    4
    5
    6
    git push -u origin master
    从本地的master推送到远程的origin
    第一次clone或push可能会有ssh警告
    第一次需要添加-u参数,以后可以直接
    git push origin master
    git push origin new_branch #推送new_branch分支到远程库
  • 克隆远程库

    1
    2
    cd moumulu
    git clone git@github.com:xxxx/xxxx
  • 将远程库合并到本地

    1
    2
    3
    git pull
    如果提示no tracking information,说明本地分支与远程分支连接没有创建,使用:
    git branch --set-upstream-to <branchname> origin/<branchname>
  • 查看远程库信息

    1
    2
    git remote
    git remote -v

分支管理

  • 查看当前分支

    1
    git branch
  • 创建分支

    1
    2
    3
    4
    git checkout -b newbranch
    -b 表示创建并切换,相当于
    git branch newbranch
    git checkout newbranch
  • 根据远程分支创建本地分支

    1
    git checkout -b abc origin/abc #abc为分支名(注意这里要创建相同的名字,不然推送的时候会失败)
  • 修改分支名

    1
    git branch -m old_branch new_branch
  • 切换分支

    1
    git checkout branchname
  • 合并分支到当前分支

    1
    2
    3
    4
    5
    git checkout master #切换到master分支
    git merge branchname #将branchname合并到当前分支
    建议用:
    git merge --no-ff -m "blabla..." branchname
    这样不使用快速合并,可以在log里保留记录
  • 删除分支

    1
    2
    git branch -d branchname
    git branch #查看

标签管理

  • 查看标签

    1
    git tag
  • 添加标签

    1
    2
    git checkout branchname
    git tag <tagname>
  • 对某次提交打标签

    1
    2
    3
    4
    git tag v0.9 a3k9359
    git tag -a v0.1 -m "version v0.1 released" a3k9359
    -a 指定标签名
    -m 添加注释
  • 查看标签信息

    1
    git show <tagname>
  • 删除标签

    1
    git tag -d v0.1
  • 推送某标签到远程

    1
    git push origin v1.0
  • 删除远程标签

    1
    2
    git tag -d v0.2 #先删除本地标签
    git push origin :refs/tags/v0.2 #删除远程标签

自定义git

  • 忽略特殊文件

    1
    2
    3
    根目录下新建 .gitignore 文件,写入文件名或.exe等类型
    git add -f a.exe #强制添加到git
    git check-ignore -v a.exe #检查规则
  • 配置文件

    1
    .git/config #配置文件存放地

问题记录

  • 有时候因为本地修改的太乱了,想直接用远程库替换本地的库可以使用下面两条命令

    1
    2
    git fetch --all #用远程库还原本地版本库
    git reset --hard origin/master #用origin/master版本库内容还原暂存库
  • 当改乱了工作区内容时,想丢弃工作区的修改 git checkout – file

  • 当改乱了文件,并且添加到了暂存区,先git reset HEAD ,再用git checkout – file
  • 当改乱了之后,并且提交到了本地版本库,使用git reset –hard 版本号 可以在各个版本之间穿梭
  • git中的check out,主要有以下两个功能:
      1.创建、切换分支。
      2.用暂存区或版本区的内容恢复到工作区。
      具体使用方法可查看蚂蚁部落教程。
  • 不小心提交了没用的文件到远程库

    1
    2
    3
    4
    5
    git rm -r --cached test/a.txt // 删除test文件夹下的a.txt文件,加入到删除缓存中
    git commit -m '删除test文件夹下的a.txt文件' // 执行删除缓存,提交文字为“删除test文件夹下的a.txt文件”
    git rm -r --cached test // 删除test文件夹,加入到删除缓存中
    git commit -m '删除test文件夹' // 执行删除缓存,提交文字为“删除test文件夹”
    git push // 推送操作到远程仓库
  • 每次add之前git status查看修改了哪些文件,每次只add修改过的文件,可以防止提交了无用的文件

  • 需要回退版本

    1
    2
    git log 或者 git reflog
    git reset --hard <commit_id> 或者 git reset --hard HEAD@{x}
  • 只恢复某个文件

    1
    2
    git checkout b284c80c2648f886266e67ea76348ca7981db8cc test/test.txt
    git checkout commit filepath
  • 暂时储藏当前的修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    有时候你改了一些文件,但此时想要切换到别的分支上工作,此时是无法切换成功的。
    这时候就需要下面这条命令:
    git stash #将当前修改暂时储藏起来
    git stash pop 或者 git stash apply 将上次的储藏恢复
    或者也可以这样:
    $ git stash list
    stash@{0}: WIP on master: 049d078 added the index file
    stash@{1}: WIP on master: c264051 Revert "added file_size"
    stash@{2}: WIP on master: 21d80a5 added number to log
    $ git stash apply stash@{2}
  • git diff

    1
    2
    3
    4
    5
    6
    $ git diff            #(1)
    $ git diff --cached #(2)
    $ git diff HEAD #(3)
    1.工作树中的更改尚未分段进行下一次提交。
    2.索引和最后一次提交之间的变化; 查看已经git add ,但没有git commit 的改动。
    3.自上次提交以来工作树中的更改;如果运行“git commit -a”,查看将会提交什么。
  • 抛弃所有改变,同步到最新远程库

    1
    2
    3
    4
    git强制覆盖本地代码:
    git fetch --all
    git reset --hard origin/master
    git pull

参考

欢迎与我分享你的看法。
转载请注明出处:http://taowusheng.cn/