Git学习记录

一、Linux上安装

Git是目前世界上最先进的分布式版本控制系统
git ——查看系统是否安装了Git
sudo apt-get install git——完成Git的安装

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
二、创建版本库
#1.选择一个合适的地方,创建一个空目录
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
#2.通过git init命令把这个目录变成Git可以管理的仓库,工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
#3.用命令git add告诉Git,把文件添加到仓库(暂存区stage)
$ git add readme.txt
#4.用命令git commit告诉Git,把文件提交到仓库(分支master)
#commit可以一次提交很多文件,所以你可以多次add不同的文件,如;$ git add file2.txt file3.txt
#git commit只负责把暂存区的修改提交(add过后,commit才会提交)
$ git commit -m "wrote a readme file"
#用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
$ git diff HEAD -- readme.txt
三、修改文件并提交
#git status命令可以让我们时刻掌握仓库当前的状态
$ git status
#如果git status告诉你有文件被修改过,用git diff可以查看修改内容
$ git diff readme.txt 
#提交修改
$ git add readme.txt
#在执行第二步git commit之前,我们再运行git status看看当前仓库的状态
#git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了
$ git status
#提交
$ git commit -m "add distributed"
 #提交后,我们再用git status命令看看仓库的当前状态
$ git status
四、多次修改后版本退回
#git log命令显示从最近到最远的提交日志
$ git log
#如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数,历史的时间线
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
#和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了
#我们要把当前版本“append GPL”回退到上一个版本“add distributed”
$ git reset --hard HEAD^
#指定回到未来的某个版本,版本号没必要写全,前几位就可以了,Git会自动去找
$ git reset --hard 3628164
#git reflog用来记录你的每一次命令
$ git reflog
五、撤销修改

用暂存区覆盖工作区 git checkout – file 可以丢弃工作区的修改 用分支覆盖暂存区 git reset HEAD file
可以丢弃暂存区的修改

reset和checkout的区别:

git reset HEAD^ //回退至上一版本, 并重置缓存区

git reset HEAD~10 //回退至10个版本之前, 并重置缓存区

git reset –soft HEAD //回退时不重置缓存区和工作区

git reset –mixed HEAD //回退时重置缓存区, 默认选项

git reset –hard HEAD //回退时重置缓存区和工作区

git reset //不指定HEAD, 用来清空缓存区的修改

git reset filename //清空缓存区指定文件的修改

git reset –hard filename //清空工作区和缓存区指定文件的修改

git checkout branch //切换branch, 同时重置缓存区和工作区, 如果工作区有修改没有提交, 需要先commit或stash

git checkout branch –force //切换branch, 同时重置缓存区和工作区

git checkout –force //不指定branch, 用来清空工作区的修改(缓存区不变, 如果之前有add, 则工作区与缓存区一致)

git checkout – filename //清空工作区指定文件的修改

六、远程仓库
1.添加远程库
首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库learngit

#远程库的名字就是origin,这是Git默认的叫法,也可以改成别的
$git remote add origin https://github.com/deliaXia/learngit.git
#把本地库的所有内容推送到远程库上
#由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
$ git push -u origin master
#此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
$ git push origin master

2.从远程库克隆
首先,登陆GitHub,创建一个新的仓库,名字叫gitskills,我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件

$ git clone https://github.com/deliaXia/gitskills.git

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

$ git clone git@github.com:deliaXia/gitskills.git

七、分支管理
1.创建与合并分支
查看分支:git branch——列出所有分支,当前分支前面会标一个*号
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
2.解决冲突
不同分支下修改同一文件并完成add commit,合并分支时发生修改内容不一致的冲突:

#告诉我们冲突的文件
$ git status
#直接查看文件内容
$ gedit readme.txt
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
#修改一致后,add commit
#用带参数的git log也可以看到分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
#最后删除多余的分支
#准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward(这种模式下,删除分支后,会丢掉分支信息)
$ git merge --no-ff -m "merge with no-ff" dev

[1]Git教程——廖雪峰的官方网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值