git学习

156 阅读3分钟

初始git配置用户名和邮箱:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

git本地仓库创建及使用:

选择一个路径创建一个空文件,然后在git Bash上cd进入到这个目录。 使用git init命令初始化这个文件夹,使它成为一个本地仓库,初始化完毕后会有一个.git的文件,这是版本库。 在本地仓库下新建一个文本文件,然后往文本文件里写入内容,然后使用git add 文件名 ,这个命令将文件放到.git版本库中的暂存区中,然后使用git commit -m "提示信息" 命令来提交修改,这样文件就被提交修改到版本库中的master了。需要注意的是提交修改有两步,一个是add,一个是commit。

$ git add readme.txt
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

也可增加多个,再一次性进行提交:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

可以使用git status 查看是否有提交修改信息:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

如果想明确知道修改了什么内容,就使用git diff命令:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

git版本回退:

先使用git log查看历史版本信息:

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

可以加选项--pretty=oneline:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

使用git reset命令进行版本回退,head指向的是当前版本,^指上一个,同理^^指上两个,如果要往上100个则使用HEAD~100:

$ git reset --hard HEAD^

也可以使用id来回退等:

$ git reset --hard 1094a

如果找不到各个版本的版本号id了,可以使用git reflog命令查看版本号:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

工作区和暂存区:

除了.git以外的文件区为工作区,.git所在的文件为版本库,暂存区在版本库内。 使用git add命令实际是把文件放进了版本库里的stage暂存区,使用了commit命令后才是放到了版本库里的master分支里面。 使用git diff HEAD -- 文件名 这个命令来查看版本区里当前的版本内容和工作区里的内容不同的东西:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files

可以使用git checkout -- 文件名来撤回修改,有两种情况,一种是撤回工作区的修改,一种是撤回修改恢复到加入暂存区之后的情况:

$ git checkout -- readme.txt

如果错误内容已经被放到了暂存区,想从暂存区撤回修改内容,则可以使用git reset HEAD 文件名,使用后可把暂存区的修改回退到工作区:

$ git reset HEAD readme.txt
Unstaged changes after reset:
M	readme.txt

最后只要再丢弃工作区修改就行了:

$ git checkout -- readme.txt

$ git status
On branch master
nothing to commit, working tree clean

如果要从版本库中删除相应的文件,则应使用git rm 文件名然后再git commit -m “提示信息”:

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

如果删除错了,可以使用git checkout -- 文件名命令将当前版本文件恢复到工作区。

远程仓库:

因为gihub的数据传输使用了SSH加密,因此本地客户端需要创建SSHkey,使用命令:

$ ssh-keygen -t rsa -C "youremail@example.com"

然后登录github,在SSHkey设置页面,设置SSHkey,将C:/USers/administrator/.ssh/id_rsa.pub这个文件里的内容复制后粘贴在github上SSHkey的设置界面输入框中。

在github上创建一个远程仓库,然后使用命令来关联远程仓库和本地仓库:

$ git remote add origin git@github.com:用户名/仓库名.git

使用以下命令来将本地仓库内容更新到远程仓库:

$ git push -u origin master

可以通过git remote -v命令查看远程仓库:

$ git remote -v
origin  git@github.com:michaelliao/learn-git.git (fetch)
origin  git@github.com:michaelliao/learn-git.git (push)

使用相关命令删除远程仓库:

$ git remote rm origin

使用以下命令从远程仓库克隆文件到本地仓库:

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

分支管理:

使用checkout命令创建分支,这个命令表示创建并切换分支:

$ git checkout -b dev

相当于以下两条命令:

$ git branch dev
$ git checkout dev

使用以下命令查看当前有的分支:

$ git branch

使用以下命令合并指定分支到当前分支:

$ git merge dev

使用以下命令删除分支:

$ git branch -d dev

使用最新的switch命令来切换分支(加了-c选项表示创建并切换):

$ git switch -c dev

如果是切换回master则使用:

$ git switch master

注意如果开启了不同的分支,且不同的分支有不同的提交修改结果,如果合并后有冲突,必须手动解决冲突才能合并。 使用以下命令禁用快速合并方式,这样会产生一个新的提交分支:

$ git merge --no-ff -m "merge with no-ff" dev

对于团队合作,每个人应该在新建分支上进行操作,master分支应该为稳定的发布平台。

git stash命令把当前工作区内容隐藏,先处理其他事务:

$ git stash

使用以下命令查看被隐藏起来的内容:

$ git stash list

使用以下命令恢复工作区内容的同时,把stash中的临时内容删掉:

$ git stash pop

关于强制删除未合并的分支命令,注意这里使用-D选项:

$ git branch -D feature-vulcan

对于多人合作:

image.png

使用以下命令给分支打标签:

$ git tag v1.0

使用以下命令查看所有标签:

$ git tag
v1.0

对某个提交打标签:

$ git tag v0.9 f52c633

创建带有说明的标签:

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

用以下命令查看标签的说明:

$ git show v0.1

使用以下命令删除标签:

$ git tag -d v0.1

image.png

image.png