Git常用命令笔记

Git常用命令笔记

Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

Git有什么特点?简单来说就是:高端大气上档次!

那什么是版本控制系统? 好了,别闹~

安装配置

  1. 安装完成后,还需要最后一步设置,在命令行输入:

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    
  2. 查看用户名和邮箱地址:

    $ git config user.name
    $ git config user.email
    
  3. 修改当前的project

    • git 修改当前的project的用户名的命令为:
    git config user.name 你的目标用户名;
    
    • git 修改当前的project提交邮箱的命令为:
    git config user.email 你的目标邮箱名;
    

创建版本库

  1. git init 命令把这个目录变成Git可以管理的仓库:

    $ git init
    Initialized empty Git repository in /Users/michael/learngit/.git/
    
  2. git status 仓库当前的状态

  3. git diff 顾名思义就是查看difference

  4. git add 加文件

    • git add -A 提交所有变化
    • git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
    • git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
  5. git commit 告诉Git,把文件提交到仓库

    $ git commit -m "hello world"
    
  6. git log 命令显示从最近到最远的提交日志`

    • 加上 --pretty=oneline 参数
    • git log –pretty=oneline
    $ git log --pretty=oneline
    3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
    ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
    cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
    
  7. git reset --hard commit_id 回退到版本
    在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    $ git reset --hard HEAD^
    HEAD is now at ea34578 add distributed
    
  8. git reflog 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

  9. git checkout -- file可以丢弃工作区的修改

    • 就是让这个文件回到最近一次git commitgit add时的状态
    • git checkout -- file 命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
  10. git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区

  11. git rm删掉,并且git commit
    从版本库中删除该文件

  12. 删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

    $ git checkout -- test.txt
    

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


远程仓库

  1. 创建SSH Key。

    $ ssh-keygen -t rsa -C "youremail@example.com"
    ssh-keygen -t rsa -C "defound@outlook.com"
    
  2. 关联一个远程库,使用命令

    $ git remote add origin git@github.com:michaelliao/learngit.git
    
  3. 第一次推送master分支的所有内容,把本地库的所有内容推送到远程库上:

    git push -u origin master
    
  4. 每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

    git push origin master
    
  5. git clone 克隆一个本地库

    $ git clone git@github.com:michaelliao/gitskills.git
    Cloning into 'gitskills'...
    remote: Counting objects: 3, done.
    remote: Total 3 (delta 0), reused 0 (delta 0)
    Receiving objects: 100% (3/3), done.
    
    $ cd gitskills
    $ ls
    README.md
    
  6. 查看当前的远程库
    要查看当前配置有哪些远程仓库,可以用命令:

    git remote
    
  7. 提取远程仓库 Git 有两个命令用来提取远程仓库的更新。

    • 从远程仓库下载新分支与数据:

      git fetch
      

    该命令执行完后需要执行git merge 远程分支到你所在的分支。

    • 从远端仓库提取数据并尝试合并到当前分支:

      git pull
      

    该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。
    假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

  8. 删除远程仓库

    git remote rm [别名]
    
  9. 实例

    $ git remote -v
    origin	git@github.com:tianqixin/runoob-git-test.git (fetch)
    origin	git@github.com:tianqixin/runoob-git-test.git (push)
    
    # 添加仓库 origin2
    $ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git
    
    $ git remote -v
    origin	git@github.com:tianqixin/runoob-git-test.git (fetch)
    origin	git@github.com:tianqixin/runoob-git-test.git (push)
    origin2	git@github.com:tianqixin/runoob-git-test.git (fetch)
    origin2	git@github.com:tianqixin/runoob-git-test.git (push)
    
    # 删除仓库 origin2
    $ git remote rm origin2
    $ git remote -v
    origin	git@github.com:tianqixin/runoob-git-test.git (fetch)
    origin	git@github.com:tianqixin/runoob-git-test.git (push)
    

分支管理

创建与合并分支

Git鼓励大量使用分支:

  1. 查看分支:git branch
  2. 创建分支:git branch <name>
  3. 切换分支:git checkout <name>
  4. 创建+切换分支:git checkout -b <name>
  5. 合并某分支到当前分支:git merge <name>
  6. 删除分支:git branch -d <name>

解决冲突

  1. git log --graph 命令可以看到分支合并图。

 Share!

 
comments powered by Disqus