Git基础
Posted 123why
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git基础相关的知识,希望对你有一定的参考价值。
Git Git是一个代码管理仓库 1.使团队协作开发变得简单 2.方便进行版本控制 这些是各种场合常见的 Git 命令: 开始一个工作区(参见:git help tutorial) 创建一个空文件夹并进入 mkdir cd 创建一个空的 Git 仓库或重新初始化一个已存在的仓库 git init 将文件放入git仓库 在本地创建的仓库有三个区 工作区、暂存区、master 在工作区创建一个文件 vim filename 通过 git add filename 添加文件内容至索引,将文件放入暂存区 通过 git commit -m "说明" 将文件放入master分支 在当前变更上工作(参见:git help everyday) mv 移动或重命名一个文件、目录或符号链接 reset 重置当前 HEAD 到指定状态 git reset --hard HEAD^ 一个‘^‘ 代表回退一个,HEAD~100回退到指定个版本,也可以使用版本id回退 rm 从工作区和索引中删除文件 在工作区中使用rm删除一个文件,如果文件没有add到暂存区或commit到仓库,将无法恢复 如果已经add到暂存区或commit到仓库,可以使用git checkout -- filename 将文件在工作区恢复 如果你确实想删除一个文件,可以使用git rm 文件在这三个区中都被删除,无法恢复 检查历史和状态(参见:git help revisions) bisect 通过二分查找定位引入 bug 的提交 grep 输出和模式匹配的行 log 显示提交日志 # 使用--pretty=oneline 将每次提交显示一行 7833bf1 (HEAD -> master) HEAD@{0}: reset: moving to 7833bf d19026a HEAD@{1}: reset: moving to HEAD^ 7833bf1 (HEAD -> master) HEAD@{2}: commit: third change d19026a HEAD@{3}: commit: second change 9d0aa2d HEAD@{4}: commit (initial): first commit reflog 查看每次的操作 # 回退版本但是后悔后,可以用来找到被回退的版本号 show 显示各种类型的对象 status 显示工作区状态 无修改时 [root@why_centos7 my_git_test]# git status # 位于分支 master 无文件要提交,干净的工作区 文件被修改,但是没有提交 [root@why_centos7 my_git_test]# git status # 位于分支 master # 尚未暂存以备提交的变更: # (使用 "git add <file>..." 更新要提交的内容) # (使用 "git checkout -- <file>..." 丢弃工作区的改动) # # 修改: hello.py # 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") 扩展、标记和调校您的历史记录 branch 列出、创建或删除分支 checkout 切换分支或恢复工作区文件 你脑子很乱,在几千行代码的不知道多少个地方写了一些乱七八糟的东西,你想删除他们,很遗憾找不到他们了, 这时候就使用git checkout HEAD -- filename可以恢复这次的修改(前提是要恢复的文件没有被add/rm), ‘--’必须添加,不加的话是切换分支 你脑子一团乱麻,把它放入了暂存区,这时候需要添加一步git reset HEAD -- filename,再checkout [root@why_centos7 git_test]# git reset HEAD -- README.md 重置后撤出暂存区的变更: M README.md 你脑子一团浆糊,把它commit到了版本库,可以使用版本回退 你脑子进水了,把它推到了远程仓库,你完了 commit 记录变更到仓库 diff 显示提交之间、提交和工作区之间等的差异 # 查看被修改的内容 [root@why_centos7 my_git_test]# git diff diff --git a/hello.py b/hello.py index f8034f9..f2cf805 100644 --- a/hello.py +++ b/hello.py @@ -1,2 +1,4 @@ hello("hello world") +first change +我进行了第一次修改 git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别 merge 合并两个或更多开发历史 rebase 在另一个分支上重新应用提交 tag 创建、列出、删除或校验一个 GPG 签名的标签对象 协同(参见:git help workflows) fetch 从另外一个仓库下载对象和引用 pull 获取并整合另外的仓库或一个本地分支 push 更新远程引用和相关的对象 告诉git你是谁 git config --global user.email "you@example.com" git config --global user.name "Your Name" 删除文件 rm filename 删除工作区的文件,add之后暂存区的文件被删除 git rm 删除仓库的文件 连接远程库GitHub 1.要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git; 使用ssh连接,并用密钥验证身份, origin后的内容在打开远程库后可以复制 2.关联后,使用命令git push -u origin master第一次推送master分支的所有内容; 3.此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改; 上面的方式是先在本地创建版本库,之后推送到远程版本库,通常不使用这种方式 1.先在github上创建一个版本库 2.在本地clone这个版本库git clone git remote add origin git@server-name:path/repo-name.git 分支 你写的未完成的代码想提交到远程,以防止本地丢失,但是又不能直接推到master上,因为代码未完成别人下载后会造成不便, 这时可以开一个自己的分支(master也是一个分支,它是默认的主分支),此时提交到远程的代码以dev分支的形式在master上继续行进, dev分支完成后就合并到master上 1.创建一个分支并切换到该分支上git checkout -b dev / git switch -c dev 2.查看当前的分支 git branch,确认已在dev分支上,此时进行的所有push都是提交到dev上 3.将dev分支的内容合并到主分支master上 先切换到主分支 git checkout master / git switch master 合并dev分支的内容 git merge dev 合并失败,解决冲突: 解决冲突之后重新提交 用git log --graph命令可以看到分支合并图。 4.删除分支 git branch -d dev fastforward模式下,注意删除分支后分支信息不再存在,可强制关闭这个模式,以保留分支信息 git merge --no-ff -m ‘a no ff merge‘ dev 这样删除分支后使用git log --pretty=oneline 可以看到分支信息 修复bug 在你正在工作时,突然接到紧急修复bug的任务 1.将手头工作另存 git stash 2.创建修复bug的分支issue-101 git chenkout -b issue-101 3.在分支issue-101 上修复bug,并提交 4.切回master,合并issue-101分支的修改,push到远程 5.删除分支issue-101 git branch -d issue-101 没有合并的分支,需要强制删除 git branch -D issue-101 6.因为我们一般在分支dev上工作,所以修复master上的bug也应该修复dev上的bug 切换到dev上 git checkout dev 使用 给git cherry-pick {commit} 将修复bug的那次提交复制过来 6.继续刚才未完成的工作 git stash list 查看被另存的手头工作 git stash pop 将其恢复的工作区,并在另存的空间删除 或者 git stash apply 再 git stash drop 删除 多人协作: 你和A一起开发,A先将他的代码推到了dev,之后你再推会被拒绝,需要先更新本地库,使用git pull 然后解决冲突,再推送 标签: 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定 git tag <tagname> <commit id>; 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息; 命令git tag -d <tagname> 可以删除标签; 命令git tag可以查看所有标签。 命令git show <tagname>查看标签的信息 命令git push origin <tagname>可以推送一个本地标签; 命令git push origin --tags可以推送全部未推送过的本地标签; 命令git tag -d <tagname>可以删除一个本地标签; 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。 自定义给git: 1.给git输出加点颜色$ git config --global color.ui true 2.有些文件需要添加在本地库中但是又不能推送到远程,可以使用.gitignore文件忽略他们 创建.gitignore,在其中加入要忽略的文件类型或文件名 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。 所有配置文件可以直接在线浏览:https://github.com/github/gitignore 忽略文件的原则是: 忽略操作系统自动生成的文件,比如缩略图等; 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件; 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。 3.给记不住的命令改个别名 git config --global alias.lg "log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit"
以上是关于Git基础的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段