一、从创建版本库走出第一步
1.首先,选择一个合适的地方,创建一个空目录:mkdir learngit(目录名)目录最好不要有中文
进入该目录:cd learngit
pwd可以查看该目录
2.通过git init命令把这个目录变成Git可以管理的仓库
3.添加文件到版本库,如添加read.txt.
先用git add read.txt将文件传到暂存区
再用git commit -m”注释”将文件传入仓库
我们的操作都是在工作区执行,然后将文件传到暂存区,最后才会到仓库
注:git status可以查看仓库当前的状态
如果文件有修改,status会告诉你,但并不能看到修改,git diff read.txt就是可以告诉你修改内容,防止自己忘了上次的修改。
二、版本回退以及管理
1.在你多次修改提交文件后发现错了想要读档回到之前的状态,commit每次执行后都会有记录,而我们就可以通过这个记录进行版本回退
git log可以查看到你的提交记录如:
commit e7bee9d959aaa3ca8758abaeced69c20185aa71b (HEAD -> master) Author: cn <[email protected]> Date: Tue Aug 21 17:16:39 2018 +0800 brancg commit 5e95555ec8bf25e820171b7bb77782fad2548344 (origin/master) Author: cn <[email protected]> Date: Tue Aug 21 15:12:41 2018 +0800 remove commit fcf31b38bf0f2d7082d069efefb29948a320035b Author: cn <[email protected]> Date: Tue Aug 21 15:11:54 2018 +0800 add commit d52f9062b783e1d09d7d33950c232107758b7402 Author: cn <[email protected]> Date: Tue Aug 21 14:48:11 2018 +0800 add test.txt
加上–pretty=oneline参数可以让记录简洁一点如
$ git log --pretty=oneline e7bee9d959aaa3ca8758abaeced69c20185aa71b (HEAD -> master) brancg 5e95555ec8bf25e820171b7bb77782fad2548344 (origin/master) remove fcf31b38bf0f2d7082d069efefb29948a320035b add d52f9062b783e1d09d7d33950c232107758b7402 add test.txt c79165f744ff745efdd8ec861424a403d86eb5c6 remove test.txt 3f68383ee7fdd64d7bc7e9a7fb0682b6108bd5a1 add test.txt 8b2c14bb5392947e82b73dc4e0e53f42fe2bad60 gut tracks changes 550cce8ec9f61101a45a4a4cb72dcb9bb77b3cbe understand how stage works b575b30a303c5e407b3b6612d726c2b191b1f754 append GPL 6b92e7a8b6a30143d27158427fdb4cb63b4d65bc wrote a readme file
我们的回退用的是git reset命令
git reset –hard HEAD^是回退到上个版本,HEAD^^就是上两个版本,HEAD~100就是上100
也可以通过版本号进行准确的版本变动git reset –hard d52f90(版本号不需要打全,但也不能太少)
如果回退到了上版本且关掉了命令行,可以通过git reflog找到版本号,该命令记录了你的每一次命令。
2.管理修改
git管理的是修改而不是文件,假设你改动了文件,但没有add到暂存区就直接commit,然后再用status查看状态,就会发现修改没有提交。
注:通过git diff HEAD — readme.txt可以查看工作区和版本库里面最新版本的区别。
3、撤销修改
通过命令git checkout -- readme.txt
把readme.txt
文件在工作区的修改全部撤销
在这里有两种情况
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
而如果你已经将文件提交到了暂存区,就可以用git reset HEAD read.txt把暂存区的修改回退到工作区(HEAD表示最新的版本),然后再撤销工作区的修改。
而如果以及提交到仓库了,就用版本回退解决。
4、删除文件
用rm read.txt删除文件或手动删除文件后,用status可以看到那些文件被删除了
如果是误删,可以git checkout –read.txt恢复,因为版本库里还保存着
还有就是删掉版本库里的这个文件,通过git rm read.txt,然后再commit实现
三、远程仓库
GitHub提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
第1步:创建SSH Key:ssh-keygen -t rsa -C "[email protected]"。如果一切顺利的话,可以在用户主目录里找到
.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件
第2步:登陆GitHub,打开”settings“,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容
第3步:登陆GitHub,然后,在右上角找到“new repository”按钮,创建一个新的仓库,在Repository name填入
learngit
,其他保持默认设置,点击“Create repository”按钮
第4步:在本地运行git remote add origin git@github.com:你自己的GitHub账户名/learngit.git,让远程仓库与本地仓库关联
第5步:将本地仓库的内容推送到远程仓库中:git push -u origin master
这是第一次推送,让两个仓库的master分支也关联起来,之后可以直接用git push origin master推送。
然后就是通过git clone git@github.com:你自己的GitHub账户名/gitskills.git
就可以从远程仓库中克隆gitskills.git,获取到gitskills目录及里面的内容。
四、分支管理
1.你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master
分支。HEAD
严格来说不是指向提交,而是指向master
,master
才是指向提交的,所以,HEAD
指向的就是当前分支。
通过git checkout -b dev
可以创建新的分支dev并切换到该分支
git checkout -b dev
等同于
git branch dev
git checkout dev
两个命令
git branch可以查看当前分支
在该分支上我们可以对read.txt进行正常的修改和提交
然后切换会master分支会发现read.txt的修改没了,这时就要用到git merge dev进行分支合并。
最后就可以用 git branch -d dev删除分支
2.但有时候,分支合并时会有冲突,如在两个分支上都做了修改并提交,这个时候再合并就可能会冲突
Git告诉我们,readme.txt
文件存在冲突,就必须手动解决冲突后再提交,即进入read.txt文件进行修改。
3.合并时git merge --no-ff -m "merge with no-ff" dev
,就可以用普通模式合并,分支就不是一条线,而是多条分支,在合并的时候有有连接。
4.开发时遇上bug,但在dev分支上的工作还没完成,但要先修复bug,就可用git stash
,将当前的工作先隐藏起来
然后确定要在哪条分支上修复bug,就先切换到那条分支,在创建修复bug用的分支,bug修复后就提交然后合并分支
再回到dev分支继续工作,用git stash list,可以看到你之前隐藏的工作
你可以通过两个方式恢复
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了
当然你可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:git stash apply stash@{0}
5.如果要丢弃一个没有被合并过的分支,可以通过git branch -D <分支名>
强行删除。
6.用git remote -v可以查看远程库的信息
如果你和队友一起推送分支,就可能失败,这就需要用git pull抓取提交(如果提示no tracking information,就说明本地分支和远程分支没有建立连接用git branch –set-upstream-to <branch-name> origin/<branch-name>本地和远程分支的名称最好一致;
pull成功后,在本地合并,解决冲突,再推送。
7.rebase的使用
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
缺点是本地的分叉提交已经被修改过了
五、标签管理
标签tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
git tag name可以创建标签,默认标签是打在最新提交的commit上
如果想打在之前的commit上,就先用log找到历史的commit id,在再加到git tag name后面即可
git tag可以查看所有标签(标签不是按时间顺序列出,而是按字母排序的)
可以用git show <tagname>
查看标签信息如git show v0.9
还可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字: git tag -a v0.1 -m "version 0.1released"1094adb
用git tag -d v0.1可以删除标签,而如果已经推送到远程再删就要现在本地删除再git push origin :refs/tags/v0.9
这样才能删除远程标签
如果要推送某个标签到远程,使用命令
git push origin <tagname>
也可以用git push origin -- tags
将所有未推送的本地标签推送
六、自定义git
配置别名git config --global alias.st status
这表示用st表示status
每个仓库的Git配置文件都放在.git/config
文件中
当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件
在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,再将该文件提交到Git,Git就会自动忽略这些文件。
如忽略了.class后,再用git add aaa.class会发现添加不了
如就是要加就用git add -f aaa.class强行添加
如果发现可能.gitignore有问题,就可以用git check-ignore -v aaa.class
命令检查
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/2256.html