本文内容为 廖雪峰Git教程 的简明笔记
首次安装需要进行配置(每个机器都必须自报家门:你的名字和Email地址)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
TODO 注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,
当然也可以对某个仓库指定不同的用户名和Email地址。
通过git init命令把这个目录变成Git可以管理的仓库:
>PS D:\GithubProject\GitLearn> git init
Initialized empty Git repository in D:/GithubProject/GitLearn/.git/
把一个文件放到Git仓库
第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add .\ReadMe.txt
第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "this is ReadMe.txt"
为什么将文件放置到Git仓库需要两个步骤?
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支
git status命令看看本地仓库状态
PS D:\GithubProject\GitLearn> 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 status可以告诉我们哪些文件被修改了。但是如果你想了解修改的内容,那么你可以使用 git diff 命令
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
修改后的内容提交仍使用 git add/git commit这两个方法.
使用git log 查看提交的历史记录
PS D:\GithubProject\GitLearn> git log
commit be7f7285addec6798a52798556bec9e38184976b (HEAD -> master)
Author: MeDeity <langrenbule@gmail.com>
Date: Mon Jul 23 22:39:21 2018 +0800
Unfortunately, git diff does not support Chinese very well.
commit 53ff37a1a9801489a9b8a5e21eaff2252a6e280c
Author: MeDeity <langrenbule@gmail.com>
Date: Mon Jul 23 22:28:33 2018 +0800
this is ReadMe.txt
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:git log --pretty=oneline
需要友情提示的是,你看到的一大串类似1094adb...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,
而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,
而且你看到的commit id和我的肯定不一样,以你自己的为准
回退版本
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,
上上一个版本就是HEAD^,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100
PS D:\GithubProject\GitLearn> git reset --hard HEAD^//回退到上一个版本
HEAD is now at 53ff37a this is ReadMe.txt
此时使用git log查看现在版本库的状态:
PS D:\GithubProject\GitLearn> git log
commit 53ff37a1a9801489a9b8a5e21eaff2252a6e280c (HEAD -> master)
Author: MeDeity langrenbule@gmail.com
Date: Mon Jul 23 22:28:33 2018 +0800
this is ReadMe.txt
发现最新一次的提交记录也没了。难道就这样永久丢失了吗?
如果能找到commit id,就可以使用以下的命令恢复到最新的版本.
PS D:\GithubProject\GitLearn> git reset --hard be7f7...4976b
HEAD is now at be7f728 Unfortunately, git diff does not support Chinese very well.
怎么找到 commit id?那么久使用git reflog(在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,
就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令)
撤销修改
1.尚未提交到缓冲区(未执行git add)的文件可以通过git checkout -- <fileName> 进行撤销修改
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令
2.已经被提交到缓存区(执行了git add)的文件git reset HEAD <file> 实现撤销
PS D:\GithubProject\GitLearn> git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: ReadMe.txt
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
再用git status查看一下,现在暂存区是干净的,工作区有修改:
PS D:\GithubProject\GitLearn> git reset HEAD .\ReadMe.txt
Unstaged changes after reset:
M ReadMe.txt
PS D:\GithubProject\GitLearn> 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
//还记得如何丢弃工作区的修改吗?
PS D:\GithubProject\GitLearn> git checkout -- .\ReadMe.txt
删除文件
//删除本地文件
PS D:\GithubProject\GitLearn> rm .\remove.txt
//删除文件,并提交到缓存区
PS D:\GithubProject\GitLearn> git rm remove.txt
//提交更改
PS D:\GithubProject\GitLearn> git commit -m "rm remove.txt"
初次使用Github相关配置
1.创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"//可以不填写密码
2:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容.
3.将本地仓库推送到github上
git remote add origin git@github.com:MeDeity/GitLearn.git
git checkout -b dev //新建分支
以上命令其实是两条命令的简写
git branch dev
git checkout dev
使用git branch查看当前所有的分支,当前分支前会有*号标注
如果当前分支为master,要合并dev分支
git merge dev
合并完成后就可以删除dev分支
git branch -d dev
当合并过程中存在冲突时,则需要先解决冲突才能重新合并,使用git log --graph命令可以看到分支合并图
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
//因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
git merge --no-ff -m "merge with no-ff" dev
当前有dev分支正在开发的情况下,有bug分支需要修复。可以使用git stash命令存储现场
//可执行多次
git stash
完成bug修正后,再去恢复现场
//查看stash列表
git stash list
//应用stash
git stash apply stash@{0}
//删除stash
git stash drop stash@{0}
//等价于 git stash apply + git stash drop
git stash pop
Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
网友评论