2020-01-08

it2025-09-28  4

https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304

简介

Git使用C开发,分布式

命令

git init:初始化

git add <file>:添加文件到仓库,实际上是将文件修改添加到.git的暂存区

git commit -m <message>:提交文件,实际上是将暂存区的所有内容提交到当前分支

git status:查看工作区状态

git diff:查看修改内容

<文件修改后,status输出“Changes not staged for commit:”>

<文件add后,status输出“Changes to be committed:”>

<文件commit后,status输出“nothing to commit, working tree clean”>

git log:查看历史记录

git reflog:查看历史命令,方便查看commit id,回到未来的版本

git reset --hard HEAD^:回退到上个版本

git reset --hard HEAD~100:回退到100个版本之前

git reset --hard <commit id>:回退到具体版本

git checkout -- <file>:丢弃工作区修改,意思是工作区的文件回到最后一次add或者commit的状态(修改的东西还没add到缓存区时使用)(其实是用版本库版本替换工作区版本)

git reset HEAD <file>:暂存区的修改撤销掉(修改的东西add了还没commit使用)

<没add,直接checkout>

<add了没commit,先reset HEAD,将暂存区撤销,然后再checkout,将工作区的丢弃>

<commit了,回退版本>

git rm <file>:删除版本库中文件,再commit提交

<删除对了:OK>

<删除错了:git checkout --file,被误删的文件就可以恢复到版本库版本>

远程仓库

github,本地git仓库和github之间传输通过ssh加密,所以需要在github设置中添加ssh key

git支持多种协议,包括https,但通过ssh支持的原生git协议速度更快

先有本地库 后有远程库 $ git remote add origin git@github.com:LastJason/learngit.git 关联本地库和远程库,添加后,远程库的名字就是origin,是git默认的叫法 $ git push -u origin master 将本地库的内容推送到远程,实际上是将当前分支master推送到远程 -u参数可以将本地master分支和远程的master分支关联起来,在以后的推送和拉取时就可以简化命令 $ git push origin master 将本地master分支修改推送到github 先远程库,后本地库 $ git clone git@github.com:LastJason/gitskills.git 克隆库

分支

git branch 查看分支 git switch <name>/git checkout <name> 切换分支 git branch <name> 创建分支 git switch -c <name> 创建并切换分支 git merge <name> 合并某分支到当前分支 git branch -d <name> 删除分支 git branch -D <name> 强制删除

[图片上传失败...(image-e0087b-1579070341521)]

解决冲突

冲突使用git status查看冲突文件,打开文件编辑

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

使用git log –graph查看分支合并情况

分支合并

一般情况,git会使用fast forward模式来合并,但是这种模式下,删除分支后,会丢掉分支信息强制禁用fast forward模式后,git会在合并时生成一个新的commit,这样就可以在分支历史上看到分支信息

[图片上传失败...(image-d9119f-1579070341522)]

分支策略

master分支非常稳定,仅用来发布新版本,平时不干活dev上干活,发布版本时合并到master上每一个人都有自己的分支,时不时往dev上合并

[图片上传失败...(image-ac0d61-1579070341522)]

bug分支

软件开发遇到bug,可以通过新建一个临时分支,在临时分支上修改最后合并的方式来修复

但是假如你工作到一半,还没提交,还要一天,但是bug现在就要改怎么办

1. git stash 可以把当前工作现场储存起来,等以后恢复现场,然后继续工作 2. git checkout master git checkout -b new-issue1 确定要在哪个分支上修复bug,在哪个分支修改就在哪个分支创建临时分支 3. 修改bug 4. git add readme.txt git commit -m "info" 提交更改 5. 修复完成后,切换到master分支完成合并,然后删除临时分支 git checkout master git merge --no-ff -m "merge" new-issue1 6. git checkout dev 回到工作分区 git stash list 查看储存的工作现场 git stash pop(git stash apply,git stash drop) 恢复工作现场并删除stash临时内容(恢复工作现场,删除stash临时内容)

假设master里面的bug改掉了,但是你现在的工作区是很久前的分支,这个bug在你的工作分支依旧存在,不用再修改一次,直接把master的修改内容复制到dev就可以

git cherry-pick commit_id 复制commit_id对应的这次修改到当前分支

推送分支

远程库

1. git remote 查看远程库的信息 2. git push origin master 将origin推送到master(将origin分支上所有本地提交推送到远程master库) 3. git pull 拉取远程库进行合并 4. git branch --set-upstream-to <branch-name> origin/<branch-name> 关联本地分支和远程分支(假如提示 no tracking information就这样)

标签管理

发布版本时,会将这个版本打个标签,tag就是一个让人容易记住的名字,和某个commit绑定

把上次那个打包发布一下,commit号6a5819... 把上次那个打包发布一下,版本号v1.2

创建标签

1. git checkout <branch-name> 切换到对应标签 2. git tag <name> 添加标签 3. git tag 查看所有标签 4. git show <tagname> 查看标签信息 5. git tag -d <tagname> 删除本地标签 6. git push origin <tagname> 推送一个本地标签 git push origin --tags 推送所有本地标签 git push origin :refs/tags/<tagname> 删除一个远程标签

忽略特殊文件

创建特殊文件 .gitignore ,然后将不希望提交的文件名写进去就可以
最新回复(0)