Loading... ## git基础操作 ### 一、配置公钥 * **ssh-keygen -t rsa -C “gongxiaoning@cgr.com.cn”** * **c盘>用户>jia>.ssh,将公钥添加到github里面** * **git config配置用户名** ``` git config user.name 'jiachenglin' git config user.email 'jcl1246329487@163.com' ``` ### 二、创建版本库 * **在本地合适的地方创建一个文件夹用于储存** * **通过 git init 把这个仓库变成一个可管理的仓库(会生成一个 .git 文件,如果你没有看到** `<span class="ne-text">.git</span>`目录,那是因为这个目录默认是隐藏的,用 `<span class="ne-text">is -ah</span>`命令就可以看见) * **git remote —— 查看版本库** * **git remote -v —— 查看版本库详细信息** * **git log --graph --pretty=oneline --abbrev-commit —— 查看代码分支图像** ### **三、工作区与暂存区** * **工作区其实就是在电脑上可以看到的目录** * **通过git init生成的.git文件属于版本库,暂存区则是版本库的重要内容** * [](http://blog.beanr.cn/usr/uploads/2021/01/2722408624.jpeg) * **在我们提交代码的时候通常是通过git add 和 git commit ,前者是将代码由工作区提交到暂存区,后者则是将暂存区的代码一次性提交到当前分枝上** ### 四、把文件添加到版本库 **tips:首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。** * **git add —— 将文件提交到暂存区** * **git commit -m "描述" -n —— 一次性提交暂存区的所有更改(-n 可以避免提交的加载过程)** * **git push origin master —— 将代码提交到master分支上(master指代分支名)** * **git push origin A:B —— A指代来源分支,B指代目标分支** * **连接远程仓库** git remote add origin 仓库地址 ### 五、从远程库克隆 * **GitHub创建远程仓库** ``` git clone git@github.com:michaelliao/gitskills.git —— 从远程库克隆(尽量使用ssh,而不是http) ``` ### 六、分支管理 * **git branch 分支名 —— 创建一个分支** * **git checkout 分支名 —— 切换到某个分支** * **git checkout -b 分支名 —— 等于依次执行上面两个命令** * **git merge master dev —— 把master上的代码,合并到dev上** * **git checkout -b newBranch origin/oldBranch** ### 七、版本回退 * **git log —— 显示提交日志,即git commit(你会看到一长串十六进制的版本号)** * **git log --pretty=oneline —— 更清晰的展示提交日志** * **git reset -- hard HEAD —— 回退到上个版本** * **git reset -- hard 1234 —— 回退到定的版本号(1234是版本号)** * **git reflog —— 显示你的操作记录(主要指一些变动代码的命令,如:commit,pull,reset)** * **git 回退版本的速度非常快,它回退版本其实只是改变了HEAD的指针而已** ### 八、git 修改 * **git管理的是修改而不是文件** * **example:第一步,对readme.txt做一个修改,比如加一行内容:** ``` $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes. ``` **然后,添加:** ``` $ git add readme.txt $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: readme.txt # ``` **然后,再修改readme.txt:** ``` $ cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. ``` **提交:** ``` $ git commit -m "git tracks changes" [master 519219b] git tracks changes 1 file changed, 1 insertion(+) ``` **提交后,再看看状态:** ``` $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a") ``` **咦,怎么第二次的修改没有被提交?** **别激动,我们回顾一下操作过程:** **第一次修改 -> **`<span class="ne-text">git add</span>` -> 第二次修改 -> `<span class="ne-text">git commit</span>` **你看,我们前面讲了,Git管理的是修改,当你用 **`<span class="ne-text">git add</span>`命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,`<span class="ne-text">git commit</span>`只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。 **提交后,用 **`<span class="ne-text">git diff HEAD -- readme.txt</span>`命令可以查看工作区和版本库里面最新版本的区别: ``` $ git diff HEAD -- readme.txt diff --git a/readme.txt b/readme.txt index 76d770f..a9c5755 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,4 @@ Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. -Git tracks changes. +Git tracks changes of files. ``` **可见,第二次修改确实没有被提交。** * **git diff HEAD 版本号 -- 要对比的文件** * **git checkout -- 文件名 —— 回退到add或者commit之前的状态(撤销修改)** ### 撤销git commit **git reset --soft HEAD^** 最后修改:2022 年 05 月 10 日 © 允许规范转载 打赏 赞赏作者 赞 0 如果觉得我的文章对你有用,请随意赞赏