Git使用记录


  • 建立版本库
    什么是版本库呢?版本库又名仓库,英文名repository,你能够简单理解成一个目录,这个目录里面的全部文件均可以被Git管理起来,每一个文件的修改、删除,Git都能跟踪,以便任什么时候刻均可以追踪历史,或者在未来某个时刻能够“还原”。

因此,建立一个版本库很是简单,首先,选择一个合适的地方,建立一个空目录:git

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于显示当前目录。在个人Mac上,这个仓库位于/Users/michael/learngit。github

若是你使用Windows系统,为了不遇到各类莫名其妙的问题,请确保目录名(包括父目录)不包含中文。shell

第二步,经过git init命令把这个目录变成Git能够管理的仓库:安全

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

瞬间Git就把仓库建好了,并且告诉你是一个空的仓库(empty Git repository),细心的读者能够发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,否则改乱了,就把Git仓库给破坏了。学习

若是你没有看到.git目录,那是由于这个目录默认是隐藏的,用ls -ah命令就能够看见。fetch

也不必定必须在空目录下建立Git仓库,选择一个已经有东西的目录也是能够的。不过,不建议你使用本身正在开发的公司项目来学习Git,不然形成的一切后果概不负责。ui

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

第一步,使用命令git add <file>,注意,可反复屡次使用,添加多个文件;

第二步,使用命令git commit -m "message",完成。
要随时掌握工做区的状态,使用git status命令。

若是git status告诉你有文件被修改过,用git diff能够查看修改内容。
HEAD指向的版本就是当前版本,所以,Git容许咱们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log能够查看提交历史,以便肯定要回退到哪一个版本。

要重返将来,用git reflog查看命令历史,以便肯定要回到将来的哪一个版本。
每次修改,若是不add到暂存区,那就不会加入到commit中。
git checkout -- filename 能够丢弃工做区的修改
总之,就是让这个文件回到最近一次git commit或git add时的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另外一个分支”的命令,咱们在后面的分支管理中会再次遇到git checkout命令。
命令git rm用于删除一个文件。若是一个文件已经被提交到版本库,那么你永远不用担忧误删,可是要当心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
$ git rm test.txt
文件就从版本库中被删除了。
另外一种状况是删错了,由于版本库里还有呢,因此能够很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt

git checkout实际上是用版本库里的版本替换工做区的版本,不管工做区是修改仍是删除,均可以“一键还原”。

添加远程仓库

要关联一个远程库,使用命令git remote add origin git@github.com:songdanzju/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的全部内容;

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

建立远程库,克隆到本地

$ git clone git@github.com:songdanzju/repo-name.git

create a new repository on the command line

echo "# Django-sample" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/songdanzju/Django-sample.git
git push -u origin master

push an existing repository from the command line

git remote add origin https://github.com/songdanzju/Django-sample.git
git push -u origin master

git push报错error: failed to push some refs to 'git@github.com:this

$ git push -u origin master
To git@github.com:xxx/xxx.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

缘由:
GitHub远程仓库中的README.md文件不在本地仓库中。
解决方案:code

$ git pull --rebase origin master
$ git push -u origin master

git关联github远程库

#要关联一个远程库,这里repo-name是你在github中建立的repository的name,使用命令
git remote add origin git@github.com:songdanzju/repo-name.git

#关联后,第一次推送master分支的全部内容,使用命令
git push -u origin master

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

从远程库克隆

首先,登录GitHub,建立一个新的仓库,名字叫gitskills:开发

咱们勾选Initialize this repository with a README,这样GitHub会自动为咱们建立一个README.md文件。建立完毕后,能够看到README.md文件:

下一步是用命令git clone克隆一个本地库:

$ git clone git@github.com:songdanzju/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

建立分支branch

首先,咱们建立dev分支,而后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示建立并切换,至关于如下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

而后,用git branch命令查看当前分支:

$ git branch
* dev
master

git branch命令会列出全部分支,当前分支前面会标一个*号。

而后,咱们就能够在dev分支上正常提交,好比对readme.txt作个修改,加上一行:

Creating a new branch is quick.

而后提交:

$ git add readme.txt 
$ git commit -m "branch test"
[dev fec145a] branch test
1 file changed, 1 insertion(+)

如今,dev分支的工做完成,咱们就能够切换回master分支:

$ git checkout master
Switched to branch 'master'

切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!由于那个提交是在dev分支上,而master分支此刻的提交点并无变:

如今,咱们把dev分支的工做成果合并到master分支上:

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就能够看到,和dev分支的最新提交是彻底同样的。

注意到上面的Fast-forward信息,Git告诉咱们,此次合并是“快进模式”,也就是直接把master指向dev的当前提交,因此合并速度很是快。

固然,也不是每次合并都能Fast-forward,咱们后面会讲其余方式的合并。

合并完成后,就能够放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

删除后,查看branch,就只剩下master分支了:

$ git branch
* master

由于建立、合并和删除分支很是快,因此Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工做效果是同样的,但过程更安全。

小结

Git鼓励大量使用分支:

查看分支:git branch

建立分支:git branch <name>

切换分支:git checkout <name>

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

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

删除分支:git branch -d <name>
相关文章
相关标签/搜索