文章目录
Git概述
Git是一个分布式的版本控制系统,由Linus花费两周开发。
SVN是一个集中式版本控制系统
提示:以下是本篇文章正文内容,下面案例可供参考
一、主要操作
Git操作流程
撤销操作
①撤销对工作目录的修改,
如果本地工作目录没有 add 过,则则从history版本库拷贝一份
如果工作目录 add 过,则从暂存区中拷贝一份
git checkout -- 文件名
②撤销对暂存区的修改(),返回到最近一次 add 之前
git reset HEAD 文件名
③撤销读history仓库的修改
移动Head指针指向的结点
git checkout 分支名
抓取操作
git fetch
将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中
git fetch <远程主机名> :抓取全部
git fetch <远程主机名> <分支名>
git pull
将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge
这样可能会产生冲突,需要手动解决
git pull 抓取所有远程分支,与当前分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>
二、分支管理
分支概述
Git每一次的修改提交后都会形成一个新的结点,以时间为主线把这些结点串起来的一条线就形成了一个分支
分支常用于多人协作、不同模块的开发,等到各个分支完成后再合并到主分支中
Git默认创建一个master的主分支
分支的基本操作
创建分支,并切换到新建分支
git checkout -b 分支名
或者
git switch -c 分支名
创建分支
git branch 分支名
删除分支
git branch -d 分支名
合并分支:把指定分支合并到当前分支
git merge 分支名
查看分支
git branch
切换分支
git checkout 分支名
或者
git switch 分支名
合并冲突
当两个分支都修改了同一个地方,Git直接进行合并时,会发生冲突,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,需要手动修改冲突后才能合并
合并有冲突时,会将冲突的内容写入到你的文件中,你解决冲突就是改这个文件,然后 add commit ,这就完成了一次合并时冲突的解决过程
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
禁止fast-forward merge
使用“快进式合并”(fast-forward merge)会直接将master分支指向要合并的分支,从而丢失分支的信息,也就是不能在分支历史上看出分支信息
可以在合并分支时禁止快进式合并
--no-ff 禁止快进式合并,使用普通模式进行合并
-m 合并时产生一个新的commit
git merge --no-ff -m 分支名
不使用快进式合并的合并结果
储藏 stash
当前分支的工作还没做完,没能commit,但是需要转到其他分支工作,可以使用Git 的储藏功能。(例如临时处理Bug)
Git的储藏功能可以在一个另外的空间将当前的工作现场保存,转去处理其他分支,等到处理完后再从储藏区中取出原来的工作现场,继续原来的工作。可以多次储藏
查看储藏区
git stash list
把当前工作环境储藏起来
git stash
恢复的同时把stash内容
git stash pop
恢复但不删除stash 内容
git stash apply
删除stash内容
git stash drop
复制一个特定的提交到当前分支
当两条分支存在相同的bug,而你修改了一条分支的bug,怎么修复另一条分支的bug
①切换到另一条分支,修改,提交
②复制一个特定的提交到当前分支
git cherry-pick <想要被复制的commit编号>
三、标签
给某次重要的提交起一个给人看的名字,与commit ID相绑定
创建
git tag [标签名] //默认最新条的commit
git tag -a 标签名 -m 说明文字
删除本地
git tag -d 标签名
删除远程
git push 远程仓库名 :refs/tags/标签名
查看
git tag //查看所有
git show 标签名
推送到远程仓库
git push orgin 标签名
git push orgin --tags //推送所有标签名
四、常用命令
git 基础
git diff
git reset
git config
git log
查看远程库的信息
git remote [-v 更详细]
五、其他问题
Git 使用策略
设置提交忽略文件
github和gitee
Git gui
SourceTree