可以查看张雪峰关于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.工作区与缓存区

img

使用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,合并后就会有历史分支,能看出来曾经做过的合并。

img

在实际开发过程中,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可以查看所有标签。