创建版本库
1、创建一个目录
这个目录里的文件可以被Git管理起来:
$mkdir learngit
$cd learngit
通过git init 命令把这个目录变成 Git 可以管理的仓库:
$ git init
Initialized empty Git repository in D:/tools/Git/workspace/.git/
可通过ls -ah命令看到隐藏文件.git,这个目录是 Git 来跟踪管理版本库的
$ ls -ah
2、把文件添加到版本库
创建一个txt文件:
$ echo "hello git" > README.txt
第一步:用命令git add 告诉 Git,把文件添加到仓库:add可以多次。
$ git add README.txt
第二步:用命令git commit 告诉 Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
引号里是说明
第一步是用git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。
仓库状态
1、运行git status 命令看看结果:
$ git status
2、可以用git diff 命令查看修改的内容
$ git diff README.txt
版本回退
1、可以用git log查看历史记录:
git log 命令显示从最近到最远的提交日志,我们可以看到 3 次提交
$ git log
分记录显示:
$ git log --pretty=oneline
commit id 不是 1,2,3……递增的数字,而是一个 SHA1 计算出来的一个非常大的数字,用十六进制表示
2、版本回退
Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD 表示当前版本,也就是最新的提交3628164...882e1e0 (注意我的提交 ID 和你的肯定不一样),上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,当然往上 100 个版本写 100 个^ 比较容易数不过来,所以写成 HEAD~100。
$ git reset --hard HEAD^
还可以返回原来的版本
$ git reset --hard 0066249b4e1bfb41eeb1faa07c8b569d1f835e96
(版本号)
Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 指针,版本回退时,只是把head指针的位置从现在这个版本指向返回的那个版本
Git 提供了一个命令git reflog 用来记录你的每一次命令:
$ git reflog
撤销修改
1、git checkout -- file 可以丢弃工作区的修改:
$ git checkout -- README.txt
命令git checkout -- readme.txt 意思就是,把 readme.txt 文件在工作区的修改全部撤销,这里有两种情况:• 一种是 readme.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;• 一种是 readme.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
2、用命令git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
删除文件
1、新建一个test.txt文件
$ touch test.txt
2、提交到分支
$ git add test.txt
$ git commit -m "add test.txt"
3、删除文件
$ rm test.txt
4、删除过后
一、确实要从版本库中删除该文件,那就用命令git rm 删掉,并且git commit :
$ git rm test.txt
$ git commit -m "remove test.txt"
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
传上我的GitHub
1、先提交到我的分支上
$ git add readme.txt
$ git commit -m "first commit"
2、传到我的GitHub上
$ git remote add origin
https://github.com/Jerome77777/workspace.git
$ git push -u origin master
分支操作
1、查看分支
$ git branch
2、创建分支
$ git branch
3、切换分支
$ git checkout dev
4、创建+切换分支
$ git checkout -b dev
5、合并某分支到当前分支
$ git merge dev
6、删除分支
$ git branch -d dev
7、冲突
当在不同分支同时提交了东西,可能会造成冲突
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。用git log --graph 命令可以看到分支合并图。
8、准备合并 dev 分支,请注意--no-ff 参数,表示禁用 Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev
合并后,我们用git log 看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
9、Bug分支
Git 还提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
创建临时分支
$ git checkout -b issue-101
查看之前的工作现场
$ git stash list
恢复现场:
方法一:用git stash apply 恢复,但是恢复后,stash 内容并不删除,你需要用git stash drop 来删除;
方法二:用git stash pop ,恢复的同时把 stash 内容也删了:
$ git stash pop
恢复到指定的stash
$ git stash apply stash@{0}
Feature分支
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个 feature 分支,在上面开发,完成后,合并,最后,删除该 feature 分支。
创建分支
$ git checkout -b feature-vulcan
切回 dev,准备合并:
$ git checkout dev
销毁分支
$ git branch -d feature-vulcan
强制删除
git branch -D feature-vulcan