Fork me on GitHub

20180906-Git笔记

初始化一个Git仓库

使用git init命令。

添加文件到Git仓库

分两步:

  • 使用命令git add ,注意,可反复多次使用,添加多个文件;
  • 使用命令git commit -m ,完成。

查看git仓库状态

要随时掌握工作区的状态,使用git status命令。

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

版本回退

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset —hard commit_id。

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
    如:git reset —hard HEAD^

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
    如:git reset —hard commit_id

git diff HEAD — readme.txt:
查看工作区和版本库里面最新版本的区别

撤销修改

git checkout — readme.txt
把readme.txt文件在工作区的修改全部撤销

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

就是让这个文件回到最近一次git commitgit add时的状态

git reset HEAD
可以把暂存区的修改撤销掉(unstage),重新放回工作区

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout — file。
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
git rm —cached

远程仓库

创建SSH Key:
$ ssh-keygen -t rsa -C “youremail@example.com”
github添加SHH

本地仓库进行远程同步

1
git remote add origin git@github.com:michaelliao/learngit.git

1
git push -u origin master

第一次push加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来

以后只要本地作了提交,就可以通过命令:

1
$ git push origin master

远程仓库tips:

  • 要关联一个远程库,使用命令

    1
    git remote add origin git@server-name:path/repo-name.git;
  • 关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

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

远程仓库克隆

1
git clone git@github.com:michaelliao/gitskills.git

分支管理(重要)

master指向最新的提交
HEAD指向的就是当前分支

只有master分支的时候:
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

下面开始实战。
首先,我们创建dev分支,然后切换到dev分支:
git checkout -b dev

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

1
2
git branch dev
git checkout dev

git branch命令查看当前分支

把dev分支的工作成果合并到master分支上:
git merge dev

合并后删除分支:
git branch -d dev

总结:
Git鼓励大量使用分支:

1
2
3
4
5
6
7
8
9
10
11
查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

本地库上使用命令git remote add把它和码云的远程库关联

1
git remote add origin git@gitee.com:liaoxuefeng/learngit.git

git remote -v查看远程库信息

1
2
3
git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)

删除已关联的名为origin的远程库:

1
git remote rm origin

关联GitHub的远程库

1
git remote add github git@github.com:michaelliao/learngit.git

关联码云的远程库:

1
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

1
2
3
4
5
git remote -v
gitee git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee git@gitee.com:liaoxuefeng/learngit.git (push)
github git@github.com:michaelliao/learngit.git (fetch)
github git@github.com:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:

1
git push github master

如果要推送到码云,使用命令:

1
git push gitee master

为开源项目贡献代码

1
git clone git@github.com:enfangzhong/bootstrap.git

添加推特公司bootstrap项目远程仓库
git remote add upstream git@github.com:twbs/bootstrap.git

查看建立连接的远程仓库

1、首先拉取推特公司最新代码
git pull upstream master

2、自己创建分支
git checkout -b feature/add_sth

然后去修改你自己代码

git status查看状态

git add ./

git commit -m “add sth”

3.切换到主分支,继续拉取网上最新代码

git checkout master
git pull upstream master

4.切换到分支,进行测试,
git checkout feature/add_sth

5.合并分支
git rebase master

git push origin feature/add_sth

坚持原创技术分享,您的支持将鼓励我继续创作!