•Workspace:工作区
•Index / Stage:暂存区
•Repository:仓库区(或本地仓库)
•Remote:远程仓库
1.初始化本地仓库
git init
2.将项目的所有文件添加到仓库中
git add .
为什么git添加问价需要add,commit一共两步,因为commit可以一次提交很多文件,所以可以多次add不同的文件,然后一次commit
例如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
3.将add的文件commit到仓库
git commit -m "注释语句"
4.时光机穿梭
git status:命令可以让我们时刻掌握仓库当前的状态
git diff 文件名:可以查看文件具体修改了什么内容
git log 显示从最近到最远的提交日志,如果觉得输出的信息太多,可以加上--pretty=oneline参数
回退到上一个版本:git reset --hard head^
在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
这样你就回到了过去,而如果你想在穿越回到刚刚的新版本,怎么办?
只要上面的命令行窗口还没有关闭,就可以顺着网上找,找到那个未来版本的commit id:git reset --hard 3628164(版本号没必要写全,只要前几位就可以,git会自动去找)
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
git管理的是修改,而不是文件
撤销修改:
git checkout --readme.txt 把readme.txt文件在工作区的修改全部撤销,这里有两种情况:1.readme.txt自然修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态了;2.readme.txt已经添加到暂存区后又做了修改,现在,撤销修改就回到添加到暂存区后的状态了
如果某些错误已经提交到了暂存区,可以使用git reset head readme.txt把暂存区的修改撤销掉
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库
删除文件:
本地的某个文件被删除了,但是版本库中还有这个文件。那么现在有两种情况:
1.你要删除版本库中的文件,可以使用git rm 文件名删除该文件,然后再git commit
2.本地误删了该文件,可在使用git checkout --test.txt命令来恢复
5.将本地仓库关联到git仓库上
git remote add origin 仓库地址
使用命令可以查看远程仓库;默认可以看到你download项目就是使用origin别名
git remote -v
关联后,可以使用git push -u origin master 第一次推送master分支的所有内容
6.分支管理
创建与合并分支:
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b dev -b参数表示创建并切换
git branch 查看当前分支,当前分支前面会有一个*号
git branch -a // 查看当前分支且列出本地所有分支
git merge dev 合并dev分支到当前分支上
git branch -d <name> 删除分支
git log --graph --pretty=oneline --abbrev-commit 查看分支合并情况
Bug分支:
当你需要修复master上的bug时,需要新建一个分支,但是当前手头的的完成,可以使用git stash一下,然后去新建的分支上去修复bug,修复完成后,在切换到原来的分支,可以使用git stash list 查看刚才的工作现场存到了哪里,使用git stash pop把刚刚stash的内容恢复出来。
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人协作:
查看远程库的信息,用git remote,如果要显示更详细的信息,可以说会用git remote -v
git remote remove origin # 删掉原来git源
7.创建标签
打一个标签
git tag <name> :git tag v1.0
查看所有标签 git tag
默认标签是打在最新提交的commit上的,有时候,如果忘了打标签,可以找到历史提交的commit id,然后打上就可以了
git log --pretty=online --abrev-commit
git tag <tag-name> <commit-id>
查看某个标签的信息
git show v0.9
可以创建有说明的标签,用-a制定标签,-m指定说明的文字
git tag -a v0.9 -m "version 0.1 released" 3628164
可以通过-s用私钥签名一个标签(可以用PGP签名标签)
git tag -s v0.2 -m "signed version 0.2 released" fec145a
删除标签:git tag -d v0.1
推送某个标签到标签:git push origin v1.0
一次性推送全部尚未推送到远程的标签:git push origin --tags
删除远程分支:
1.先删除本地分支:git tag -d v0.9
2.在从远程删除:git push origin :refs/tags/v0.9
5.上传到git之前,要先pull一下
git pull origin master
6.上传代码到git服务器:git push <远程主机名> <本地分支名> <远程分支名>
git push origin master
7.从git上下载代码
git clone <仓库地址>
8.fetch
从一个或多个其他存储库中获取分支或标签以及完成其历史所必需的的对象。远程跟踪分支已更新,需要将这些更新取回本地,这时就要用到git fetch命令
(1) 更新远程跟踪分支:git fetch origin
(2) 明确使用refspec:git fetch origin +pu:pu maint:tmp
此更新通过从远程存储库的分支pu和maint提取来分支本地存储库中的pu和tmp
(3) 在远程分支上窥视,无需在本地存储库中配置远程
git fetch git://git.kernel.org/pub/scm/git/git.git maint
从git://git.kernel.org/pub/scm/git/git.git存储库中获取分支
(4) 将某个远程主机的更新:git fetch <远程主机名>
(5)要更新所有分支,命令可以简写为:git fetch
(6)上面命令将某个远程主机的更新,全部取回本地。默认情况下,git fetch取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名,如下所示:git fetch <远程主机名> <分支名>