Git学习整理
纯手打的有点累,,
需要注意的是,git只能跟踪纯文本方式编写的文件,不要使用记事本编辑任何文件
常用命令
新建仓库篇
- 创建版本仓库:
git init
- 将一个文件添加到git仓库:
git add 文件名
- 将所有文件加到git仓库:
git add -a
- 执行提交:
git commit -m "当前版本更新信息"
版本控制篇
- 查看提交历史记录:
git log
- 退回到上个版本:
git reset --hard HEAD^
- 退回到指定版本:
git reset --hard 指定版本号
- 查看命令历史:
git reflog
- 查看工作区状态:
git status
- 放弃工作区的修改:
git checkout -- 文件名
(未git add到暂存区) - 将暂存区的修改撤销掉(已git add到暂存区):
- 先
git reset HEAD <File>
- 再
git checkout -- <File>
- 先
- 从版本库删除文件
git rm file
- 后悔药
git checkout -- file
远程仓库篇
- 关联远程仓库:
git remote add 远程库的名字 远程库地址
远程库名字默认为origin - 将当前分支的
git commit
内容推送到远程仓库:git push 远程仓库名 提交分支名
- 从远程仓库克隆:
git clone 远程仓库地址
分支管理篇
-
创建分支并切换:
git checkout -b 分支名称
-
创建分支:
git branch 分支名称
-
切换分支:
git checkout 分支名称
-
查看当前分支:
git branch
-
将指定分支合并到当前分支:
git merge 分支名称
-
删除指定分支:
git branch -d 分支名称
git鼓励在某个分支完成某个任务,合并后再删除掉分支,效果相同,但是过程更加安全
-
新版本git提供
switch
命令来切换分支:- 新建分支并切换
git switch -c 新建分支
- 切换到已有分支
git switch 已有分支
- 新建分支并切换
解决合并分支冲突
- 使用
git status
查看冲突的文件 - 通过手动解决冲突内容
- 再次进行提交
默认情况下,git会使用
Fast forward
模式,删除分支后,会丢掉分支信息。如果要强制禁用
Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "commit 信息" 分支名字
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
Bug分支
-
保存工作现场并不提交:
git stash
我曾因为切换分支前没有保存工作现场又没commit导致一晚上的工作成果白费 -
从需要修复Bug的分支上创建新的bug分支
git checkout master
git checkout -b bug分支
-
再bug分支修复完bug后切换到原分支,然后合并,最后删除bug分支
git switch master
git merge --no-ff -m "bug修复信息" bug分支
git branch -d bug分支
-
继续回到dev分支干活
- 查看保存的工作现场
git stash list
- 恢复
git stash apply
,删除stash内容git stash drop
- 恢复并删除
git stash pop
- 查看保存的工作现场
-
发现之前master分支的bug在dev分支上存在同样的bug,需要做同样的修改
- 复制一个特定的提交到当前分支
git cherry-pick 提交代码
如果要强行删除一个未合并过的分支,使用
git branch -D 分支名称
- 复制一个特定的提交到当前分支
多人协作
- 查看远程库的信息
git remote
- 将本地库推送到远程库,推送时要指定本地分支:
git push origin 分支名称
- 抓取远程仓库的分支
- clone远程库后, 就必须创建远程的分支到本地
git checkout -b 分支 远程仓库/分支
- 推送时有冲突:先将最新的提交pull下来,在本地合并,再推送
git pull
也失败了, 原因是没有指定本地分支与远程分支的链接 ,就设置本地分支和远程分支的连接git branch --set-upstream-to=origin/dev dev
- 再进行pull,手动解决冲突后,再push
git rabase
命令可以将本地的提交记录整理成一条直线
- clone远程库后, 就必须创建远程的分支到本地
标签
- 命令
git tag
用于新建一个标签,默认为HEAD
,也可以指定一个commit id; - 命令
git tag -a -m "blablabla..."
可以指定标签信息; - 命令
git tag
可以查看所有标签。 - 操作标签
- 命令
git push origin
可以推送一个本地标签; - 命令
git push origin --tags
可以推送全部未推送过的本地标签; - 命令
git tag -d
可以删除一个本地标签; - 命令
git push origin :refs/tags/
可以删除一个远程标签。
- 命令
自定义Git
忽略特殊文件
再git工作区根目录下的.gitignore
中,把要忽略的文件名填进去