首页 > 代码库 > git基础

git基础

1. Git配置

Git 提供了一个叫做git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,可以存放在以下三个不同的地方:

  • /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config 时用--system 选项,读写的就是这个文件。
  • ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用git config 时用--global 选项,读写的就是这个文件。
  • 当前项目的git 目录中的配置文件(也就是工作目录中的.git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config 里的配置会覆盖/etc/gitconfig中的同名变量。

在Windows 系统上,Git 会找寻用户主目录下的.gitconfig 文件。主目录即$HOME 变量指定的目录,一般都是C:\Documents and Settings\$USER。接下来配置个人的用户名称和电子邮件地址。这两条配置很重要,每次Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

$ git config --global user.name "John Doe";            
$ git config --global user.email johndoe@example.com

要检查已有的配置信息,可以使用git config --list 命令;
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
abd
$ git config user.email
xxxxx@formail.com

获取帮助常用命令

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

2. Git基础

2.1 取得git仓库

从本地目录初始化一个仓库执行:

$ git init

初始化后,在当前目录下会出现一个名为.git 的目录,所有Git 需要的数据和资源都存放在这个目录中。.git文件也叫本地仓库

从现有仓库克隆执行命令:git clone [url]

$ git clone git@github.com:name/rep_name.git

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

2.2 记录更新到仓库

工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪,在Git 内都只有三种状态:已提交(committed)已修改(modified)已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
技术分享

常用命令

  • git status : 查看当前本地仓库状态
  • git add : 跟踪新文件 ,即是把文件修改添加到暂存区(stage)
  • git commit -m "commit construction" : 提交更改,实际是把暂存区的所有内容提交到当前分支
  • git rm : 从暂存区中移除某个文件
  • git mv file_from file_to : 移动文件,在同一个目录中移动,相当于对文件重命名
  • git log : 查看提交历史
    • $ git log –p -2 : -p 选项展开显示每次提交的内容差异,用-2 则仅显示最近的两次更新
    • $ git log --pretty=oneline --pretty 选项可改变提交展示提交历史的默认格式,如用oneline将每个提交放在一行显示,这在提交数很大时非常有用
    • 其它选项 说明:
      -p 按补丁格式显示每个更新之间的差异。
      --stat 显示每次更新的文件修改统计信息。
      --shortstat 只显示--stat 中最后的行数修改添加移除统计。
      --name-only 仅在提交信息后显示已修改的文件清单。
      --name-status 显示新增、修改、删除的文件清单。
      --abbrev-commit 仅显示SHA-1 的前几个字符,而非所有的40 个字符。
      --relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
      --graph 显示ASCII 图形表示的分支合并历史。
      --pretty 使用其他格式显示历史提交信息。可用的选项包括oneline,short,full,fuller 和format(后跟指定格式)

2.3 远程仓库的使用

  • 查看当前的远程仓库 git remote 
    git remote
    它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。

    也可以加上-v 选项(译注:此为—verbose 的简写,取首字母),显示对应的克隆地址:

      $ git remote -v
      origin git://github.com/schacon/ticgit.git
    
  • 添加或者关联一个远程仓库 git remote add [remote_shortname] [url]
      $ git remote add ups git@server-name:path/repo-name.git
    
  • 从远程仓库抓取数据到本地 git fetch [remote_shortname]
    • 如果是克隆了一个仓库,此命令会自动将远程仓库归于origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并
    • 如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下git clone 命令本质上就是自动创建了本地的master 分支用于跟踪远程仓库中的master 分支(假设远程仓库确实有master 分支)。所以一般我们运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。
  • 推送数据到远程仓库 git push ([remote_name]) ([branch_name])
    $ git push origin master
    只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送。

  • 查看远程仓库信息 git remote show [remote_name]
    $ git remote show origin

  • 远程仓库的删除和重命名
    • 重命名 git remote rename [oldname] [newname]
      git remote rename pb paul
    • 删除 ** git remote rm [remote_repname]
      $ git remote rm paul

3. Git 分支

Git中,HEAD指针是一个指向你当前正在工作中的本地分支的指针。在切换分支时,HEAD指针指向切换后的分支。

3.1 基本分支常用命令

  • git branch : 查看所有分支信息,当前分支前面会标一个*号
  • git branch <branch_name>: 创建分支
  • git checkout <branch_name>: 切换分支
  • git checkout -b <branch_name>: 创建同时切换到新创建的分支
  • git checkout -b <branch_name>origin/branch_name : 在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致
  • git merge <branch_name>: 合并某分支到当前分支,有冲突,先执行git status 查看哪个文件冲突,再执行git add 或者 git commit命令解决冲突
  • git branch -d <bbranch_name>: 删除分支
  • git log --graph : 查看分支合并详细图
  • git log --graph --pretty=oneline --abbrev-commit(常用此命令) : 查看分支合并缩略图(只显示每次提交的一行)

3.2 远程分支

3.2.1 创建和管理远程分支

远程分支就是本地分支push到服务器上的时候产生的

  1. 创建本地分支
    git branch b1
  2. 切换本地分支
    git checkout b1
  3. 远程分支就是本地分支push到服务器上,服务器会自动创建一个和本地同名的远程分支。git push [远程仓库名]:[远程分支名]
    git push origin b1
  4. 抓取远程分支数据
    • git pull <remote_rep>这种方式没有把本地分支和远程分支链接起来
    • git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联,然后再使用git pull,如果有冲突,要先处理冲突
  5. 推送数据到远程服务器
    • 如果在当前分支,使用
      git push
      或者
      git push origin b1
    • 不在当前分支,使用
      git push origin <local_branch_name>:<remote_branch_name>
  6. 删除远程分支
    git push [远程仓库名] :[远程分支名],删除远程分支名,注意:前的空格不能少,原理是把一个空分支push到server上,相当于删除该分支

    git push origin :b1

4. Git储藏功能(Stashing)

经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。

git stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

常用命令

  • git stash : 储藏当前工作状态
  • git stash list : 查看现有的储藏
  • git stash apply (stash_name如stash@2) : 恢复储藏,若不指定name,Git默认使用最近的储藏即是stash@1,并尝试应用它,以这种方式恢复,stash内容不删除,还需要用git stash drop来删除
  • git stash drop (stash_name如stash@{2}): 删除储藏,()表可选
  • git stash pop (stash_name如stash@{2}) : 恢复stash内容同时把stash中内容删除,()表可选

参考:

  1. 《Pro Git》中文版
  2. 廖雪峰Git教程

git基础