[toc]

Git基本使用

Git配置

git config --global user.name XXXX
git config --global user.email XXX@XXX.com

显示Git项目中的通用信息

$ git config --list --global
user.name=tanghengbo
user.email=2938857831@qq.com

添加删除配置

>git config --global --add user.name XXX
>git config --global --unset user.name XXX

配置别名Alias

>git config --global alias.lg "log --color --graph
    --pretty=format:'%Cread%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)
    %C(bold blue)<%an>%Creset' --abbrev-commit

使用方式

>git lg
fatal: your current branch 'master' does not have any commits yet

创建Git仓库

Git init
把一个目录快速设置为Git的代码仓库。

>git init
Initialized empty Git repository in D:/Test/Chapter_1/.git/

Git clone
clone一个远程仓库到本地

提交修改

add&&commit
通过git status查看添加新文件后,代码仓库的状态变化。

>git status
On branch master
Initial commit
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gradle/
        .idea/
        Chapter_1.iml
        app/
        build.gradle
        build/
        gradle/
nothing added to commit but untracked files present (use "git add" to track)

git add

>git add .idea
warning: LF will be replaced by CRLF in .idea/compiler.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in .idea/gradle.xml.
The file will have its original line endings in your working directory.
The file will have its original line endings in your working directory.
>git commit -m "add ./idea"
[master (root-commit) 899bb2b] add ./idea
 17 files changed, 2486 insertions(+)
 create mode 100644 .idea/compiler.xml

git log
git shortlog

>git log
commit 899bb2bfc3fb8a6bf95d5285be74510ea81df6f2 (HEAD -> master)
Author: tanghengbo <2938857831@qq.com>
Date:   Wed Aug 23 16:06:42 2017 +0800
    add ./idea
>git shortlog
tanghengbo (1):
      add ./idea

追加修改

git commit --amend -m "add test2"
当开发者提交一个commit后,如果发现该commit出错,可以随时对这个commit进行修改,通过git commit --amend指令进行,而不用重新生成提交。

>git commit --amend -m "add test2"
[master a5c01c5] add test2
 Date: Wed Aug 23 16:06:42 2017 +0800
 17 files changed, 2486 insertions(+)
 create mode 100644 .idea/compiler.xml
 create mode 100644 .idea/copyright/profiles_settings.xml
 create mode 100644 .idea/gradle.xml

查看仓库状态

发现当前代码和未修改之前代码的具体差异。通过此指令告诉开发者当前代码仓库中所有文件的版本追溯,当前那个文件进行了什么修改。

>git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

通过git diff README,查看README的具体变化。

追溯版本历史

>git log
commit afef964d07f6decc3bf32e7a5f544613cb295110 (HEAD -> master, origin/master, origin/HEAD)
Author: tanghengbo <2938857831@qq.com>
Date:   Thu Aug 17 19:29:40 2017 +0800
    First Commit
commit 4ec585b6a8c2d80523104a9af73cd8731368bef0
Author: thp <tanghengbo@live.com>
Date:   Thu Aug 17 19:15:29 2017 +0800
    Initial commit

git blame指令追溯一个指定文件的历史修改记录,显示信息如下:

>git blame app/build.gradle
52ad6c32 (tanghengbo 2017-08-17 19:29:40 +0800  1) apply plugin: 'com.android.application'
52ad6c32 (tanghengbo 2017-08-17 19:29:40 +0800  2)
52ad6c32 (tanghengbo 2017-08-17 19:29:40 +0800  3) android {
52ad6c32 (tanghengbo 2017-08-17 19:29:40 +0800  4)     compileSdkVersion 26
52ad6c32 (tanghengbo 2017-08-17 19:29:40 +0800  5)     buildToolsVersion "26.0.0"
52ad6c32 (tanghengbo 2017-08-17 19:29:40 +0800  6)     defaultConfig {
afef964d (tanghengbo 2017-08-23 09:23:58 +0800  7)

push到远程仓库
创建版本库 git init
git clone git@192.168.0.1:tanghengbo/SimpleAndroidTest.git
添加文件 git add .
提交文件 git commit -m "first commit
推送文件 git push -u origin master
关联远程仓库 git remote add origin xx.git
拉取服务器提交 git pull origin master

Git的核心思想

  • 分布式
  • 快照
  • 状态区
  • 分支

目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许上千个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

分支管理 git branch 分支名
分支切换 git checkout 分支名
分支查看 git branch
分支合并 git merge 分支名
分支删除 git branch -d 分支名

git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库、远程库。
git commit操作的是本地库,git push操作的是远程库。
git commit是将本地修改过的文件提交到本地库中。
git push是将本地库中的最新信息发送给远程库。

那有人就会问,为什么要分本地commit和服务器的push呢?
因为如果本地不commit的话,修改的纪录可能会丢失。
而有些修改当前是不需要同步至服务器的,所以什么时候同步过去由用户自己选择。什么时候需要同步再push到服务器

Git操作区域

工作区
暂存区(核心)保存在index的.git文件夹下,所有代码的提交记录。
历史区
git commit 将暂存区中的内容全部提交。

Git回退

checkout&&reset

git checkout 还原一个代码仓库的文件。会抛弃当前本地所有修改,恢复上次提交
的最后提交的版本。
用于版本库里的版本替换工作区的版本。
git reset 将文件移出暂存区。

Git文件操作

rm(清除)

remove
执行shell的rm指令进行删除。

同步协作(未完成)

git remote add指令将本地仓库添加到远程仓库中。

删除远程 git 仓库

$ git remote rm origin

创建分支

git checkout -b dev #创建分支
git branch 查看分支
git merge dev 合并分支
git branch --set-upstream-to=origin/master master 把push和pull的默认分支设置为master

设置代理

git config --global https.proxy http://127.0.0.1:1080

git config --global https.proxy https://127.0.0.1:1080

git config --global --unset http.proxy

git config --global --unset https.proxy