可以查看张雪峰关于git的介绍,地址
1. 创建git版本库
git init
把当前目录变成git可以管理的仓库。
git add 1.txt
把1.txt这个文件添加到git仓库,一定要在仓库所在的目录下哟!
git commit -m "add a file"
把文件提交到仓库,-m 后面输入的是本次提交的说明,可以添加多个后一次性提交。
2. 版本控制
git log
查看最近的提交历史的操作记录,由最近到最远排序, 添加--pretty=oneline
可以简化查询信息。
git reset --hard HEAD^
回退到上一个版本,HEAD
是一个指针,指向当前版本,HEAD^
表示上一个版本,HEAD^^
表示上上个版本, HEAD~100
表示上100个版本,可以确定要回退的版本。
git reflog
查看操作命令历史,然后使用git reset --hard commit_id
回到未来的版本。
git status
可以查看当前工作区与暂存区文件提交的状态。
3.工作区与缓存区
使用git add
实际上是把文件从工作区添加到暂存区;
使用git commit
提交更改,实际上是把暂存区的内容提交到master
分支,当我们在创建git版本仓库时,会自动创建一个唯一的master
分支。
在每一次对工作区的文件进行修改后,先git add
添加到缓存区,然后在git commit
提交到分支,这样才能实现对版本库里的文件进行更新。
4.仓库文件管理
管理修改
git diff Head -- file
当前工作区的与版本库里文件的差别。
撤销修改
git checkout -- file
可以丢弃工作区的修改,即让这个文件回到git commit
或者>git add
时的状态,注意,其中的--
十分重要,如果去掉就是切换分支的命令了。如果文件已经提交到了暂存区
git add
,想丢弃修改,首先使用git reset Head ><file>
命令,然后再使用git checkour -- file
。如果文件已经提交到了版本库里,要撤销本次提交,可以使用版本回退。
删除文件
可以使用Linux命令
rm file
或者直接在文件管理器中直接把文件删除了,也可以使用命令git rm file
.
5.远程仓库
添加远程仓库
git remote add origin >git@github.com:username/***.git
关联远程仓库,其中username是自己的github用户名,***为仓库名,可以在GitHub上等代码托管网站自己建立远程仓库。
git push -u origin master
第一次推送master分支的所有内容。
git push origin master
第一次提交后,推送新的修改版本。其中需要注意SSH有关方面的配置。
克隆远程仓库
git clone
,使用克隆命令,后面可以接仓库的https或SSH地址,例如:git clone git@github.com:username/***.git
。
6.分支管理
创建与合并分支
git branch
,查看当前分支。
git checkoout -b <name>
,表示创建分支并切换。可以等价为两条语句:
git branch <name>
和git checkout <name>
。
git checkout <name>
,用来切换分支,但容易与git chechout -- <file>
撤销修改命令混淆,最新版的Git可也以使用新的切换分支命令:
git switch <name>
来切换分支,但Git版本须2.23版本以上,可以使用git update-git-for-windows
来更新,速度太慢不推荐。
git merge <name>
,用于合并指定分支到当前分支。
git branch -d <name>
, 删除分支。
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
git log --graph
命令可以看到分支合并图。
分支管理
在分支合并时,大对数情况下采用的是
Fast forward
模式,在这种模式下,分支删除后就会丢失分支信息,可以采用
git merge --no--ff -m "message" <name>
, 这种方式会提交一个commit,合并后就会有历史分支,能看出来曾经做过的合并。在实际开发过程中,master分支非常稳定,一般仅用来发布新版本,团队成员的开发一般会推送到dev分支等。
Bug分支
Bug分支,顾名思义为了修复Bug而创建的分支,而当目前的工作还未还未完成,不能提交现在正在工作的分支,可以使用Git的
git stash
功能,可以把当前的工作现场“保存”下来,等到恢复现场后继续工作。
git stash lsit
查看工作现场,恢复工作现场的办法有两个:
git stash apply
恢复现场但不删除stash内容,git stash drop
来删除stash中的内容。
git stash pop
可以回到工作现场,恢复的同时把stash内容删除。当个多个分支上存在bug时,可以使用命令
git cherry-pick <commit_id>
,把bug提交到修改“复制”到当前分支,避免重复劳动。
Feature分支
开发一个新的功能,最好是新建一个分支,如果丢弃一个没有被合并的分支,可以使用命令
git branch -d <name>
强行删除。
多人协作
从远程仓库克隆时,实际上是对应本地master分支与远程仓库的master分支,远程仓库的默认名是origin。
git remote
,查看远程仓库信息。
推送分支:git push origin <branch_name>
,在推送中可能出现失败,本地提交有冲突,先使用git pull
从远程仓库拉取最新的提交,然后在本地解决冲突,再推送。
Rebase
git rebase
可以把本地未push的分叉提交历史整理成直线,可以使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
7.标签管理
标签可以使得查找commit更加容易,不在需要记得commit id,tag与某个commit绑定。
git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id;
git tag -a <tagname> -m "***"
可以指定标签信息;
git tag
可以查看所有标签。