git基本配置
Posted Paradise Lost Hair
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git基本配置相关的知识,希望对你有一定的参考价值。
创建版本库
版本库又名仓库(repository),在项目(可以是空项目)所在的目录下右键git bash,输入
git init 目录下多了一个.git隐藏目录,用来管理版本库。
将文件添加到版本库
add 文本文件要在创建仓库的目录中,把文件添加到仓库
git add 文件名
commit 把文件提交到仓库
git commit -m "wrote a readme file" -m后面输入的为本次提交的说明
commit一次可以提交很多文件,所以可以用多次add不同文件
git add file1.txt git add file2.txt file3.txt git commit -m "add 3 file."
查看状态
git status
可以知道那个文件被修改了,如果修改的文件没使用add,会告诉还没有准备提交的修改 否则,会提示要被提交的修改。 commit之后查看状态后
git status On branch master nothing to commit,working tree clean
具体修改
git diff 文件名 知道文件具体有哪些修改
版本回退
每次commit都会被记录为一个版本
git log git log --pretty=online
查看历史记录,显示从最近到最远的提交日志。显示版本号为一大串十六进制数字,称为commit id
如果要回退到以前版本,git必须知道以前版本是哪个版本,git用head表示当前版本,上一个版本head^ ,上上个版本head^^,可以写成head~100
回到上一个版本
git reset --hard HEAD^
这时候查看历史记录git log,发现最近的版本不见了,但只要命令窗口还未关闭,就可以使用git reset --hard 版本号前几位复原。
git reflog,记录每一次命令。
工作区与暂存区
工作区(Working Directory)
在电脑中能看到的目录
版本库(Repository)
工作区中的一个隐藏目录,是git版本库,其中最重要的为stage(暂存区)**,以及git为我们创建的第一个分支master**,和指向master一个指针HEAD
•第一步git add把文件添加到暂存区•第二步git commit把暂存区内容提交到当前分支。
管理修改
git跟踪并管理的是修改而非文件。git commit只负责把暂存区修改提交,如果修改文件后没有git add是不会有变化的。
撤销修改
git checkout -- 文件名,把文件在工作区的修改全部撤销
1.文件修改后还没有放到暂存区,撤销修改回到和版本库一模一样的状态2.文件修改后添加到了暂存区,然后又做了修改,这是撤销修改回到添加到暂存区后状态。3.总之,就是让这个文件回到最近一次commit,或者add的状态
git reset HEAD 文件名 把暂存区修改全部撤销到工作区。
删除文件
在工作区删除文件,git status会显示此次修改
1.确实从版本库中删除该文件git rm 文件名,然后git commit2.恢复删除git checkout -- 文件名
远程仓库
1.创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
2.登陆GitHub,打开“Account settings”,"SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
添加远程仓库
origin是git默认远程仓库叫法 3. 把本地库的所有内容推送到远程库
git push -u origin master 4. 本地做了提交commit,可以通过命令 git push origin master 将本地master分支最新修改推送到GitHub上。
删除远程库
git remote -v 查看远程库信息,然后根据名字删除。git remote rm
此处的“删除”其实是解除了本地和远程的绑定关系,并不是 物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
从远程库克隆
分支管理
创建分支
每次提交,git把它们串成一条时间线,这条时间线就是一个分支,git默认的分支即master,为主分支,严格来说,HEAD指向的不是当前提交,而是指向master,master才是指向提交的,HEAD指向当前分支。
当我们创建新的分支,如Dev时,git新建了一个指针Dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
从现在开始,对工作区修改就是针对dev分支,新提交一次,dev指针往前移动一步,而master指针不变
如果在dev上的工作完成了,就可以直接把dev合并到master上。直接把master指向dev的提交
合并分支后,甚至可以删除dev分支,删除dev分支就是把dev指针删除掉,只剩下master分支
实例
1.创建dev分支,并切换到dev分支
git checkout -b dev
-b 表示创建并切换,相当于
git branch dev git checkout dev
1.查看当前分支
git branch git branch会列出所有分支,当前分支会有*好
2.进行修改并提交3.切回分支
git checkout master
1.合并分支
git merge dev 用于合并指定分支到当前分支
Fast-forward语句,表示这次合并是快进模式,也就是直接把master指向dev当前提交。
1.删除分支
git branch -d dev
switch
切换分支的另一种使用方法
创建并使用新的dev分支
git switch -c dev 直接切换到已有的master分支 git switch master
解决冲突
切换到master分支后,有修改并且提交的情况下
这种情况下无法进行"快速合并",只能试图把各自的分支修改合并起来,这种情况下会有冲突,必须手动解决冲突再提交。git status会告诉我们冲突的文件
修改后再提交
查看分支合并情况
git log --graph --pretty=online -- abbrev -commit
最后删除分支
git branch -d 分支名
分支管理策略
快速合并模式下,删除分之后,会丢掉分支信息,如果强制禁用Fast forward模式,git就会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息。
合并分支时使用 --no-ff的git merge
git merge --no-ff -m "提交信息" 分支名称
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。合并后用git log看看分支历史
分支策略
1.首先master分支应该是非常稳定的,也就是仅用来发布新版本,平时并不在上面干活2.干活都在其他分支上,例如dev分支,也就是dev分支是不稳定的
Bug分支
修复bug时,经常通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成,先把工作现场git stash,然后去修复bug,修复后再git stash pop回到工作现场,在master分支修改bug,想要合并到当前分支,可以用git cherry-pick ,把bug提交的修改复制到当前分支。
以上是关于git基本配置的主要内容,如果未能解决你的问题,请参考以下文章