git学习心得1

在公司的版本管理中svn和git都用到了,以前用git都是用的图形化的软件tortoiseGit,这样的方式虽然方便,但却不利于学习,也没感觉到git相比svn有哪些好的地方,今天花了一天的时间专门学了了下git的命令行操作,把学习的整理了一下,算是做个记录吧。参考的是廖雪峰老师的git教程

首先是安装git,我的环境是win7 64位的,安装比较简单,下载安装包,点击安装就基本没问题了。

打开git bash开始

git主要可以分为以下几块

一本地同一条分支的git操作,二是不同分支的管理,三是本地库与远程库的同步管理

先看第一个问题

1.切换目录
进来后是在根目录,要切换到c盘或者D盘用如下的命令,有两种方式
方式一:cd d:
方式二:cd /d

2.创建 目录
mkdir learngit

3.将目录指定为git仓库
git init

git本地仓库实际上就是一个本地的目录,这是这个目录是通过执行git init命令被git管理起来,git仓库中的文件才能被git管理,其他目录下的文件git无法管

4.创建编辑一个文件readme.txt

5.将文件添加到git仓库
git add readme.txt

在添加的时候会报一个错,主要是各个操作系统的换行符不一致导致的,默认会全部转为linux的换行符
执行以下命令,会采用系统默认的换行符
git config --global core.autocrlf false

6.添加到本地的git仓库后还需要提交
git commit -m 'wrote a readme files'

在git中存在暂存区的概念,工作去不能直接提交到本地版本库,必须先经过暂存区,然后在从暂存区提交到本地版本库
小结:在git中提交一个新的改动到本地版本库分为两步
第一步:将修改的内容添加到暂存区
第二部:commit,这样添加到暂存区的文件就会被提交到版本库,而其他修改的文件则不会被更新到版本库

注意;若同时修改两个文件甲和乙,甲添加到暂存区,乙没有添加,则执行commit命令甲的改动会更新到版本库,乙的改动则不会更新到版本库

7.查看工作区间的状态
git status   这是最常用的命令
查看修改的内容
git diff


8.版本切换
git reset --hard 3628164  定位到指定的版本号 过去的或者未来的某个版本都可以(相对当前版本而言)

git reset --hard  HEAD^     回到上一版本

两条命令的区别:对于当前版本而言,git reset --hard 版本号 改命令既可以向前定位,也可以向后定位,即可以同时定位当前版本之前的版本和之后的版本。

git reset --hard  HEAD^ 则只能向前定位,不能向后定位,只能定位到当前版本前面的版本,不能定位到当前版本后面的版本。


git命令:
git log --pretty=oneline   显示提交日志,完整版本号,在某次提交前的所有的提交日志
git reflog                 查看命令历史,用户的每一条操作指令都会显示在日志中

9. git diff head -- readme.txt

10.git 对修改的管理
第一次修改 -> git add -> 第二次修改 -> git commit
则只有第一次的修改被提交了,第二次修改的内容没有被提交
git commit只负责把暂存区的修改提交了,没有添加到暂存区的修改不会被提交
修改1->add->修改2->add(合并修改一和修改二)->commit(提交两次合并后的修改)

11.撤销修改
git checkout 丢弃工作区的修改或者对暂存区的修改,回到最近的一次git commit或git add时的状态
git checkout -- readme.txt
就是让这个文件回到最近一次git commit或git add时的状态
git checkout -- file命令中的--很重要,
没有--,就变成了“切换到另一个分支”的命令
我们在后面的分支管理中会再次遇到git checkout命令


12.丢弃暂存区的修改
git reset 丢弃暂存区的修改
一.将暂存区的修改撤销,重新放回工作去
git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
二.丢弃工作区的修改


13.删除文件
一.将删除添加到暂存区
git rm test.txt
二.删除操作提交到版本库
git commit -m "remove test.txt"


git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
看看下面的场景中执行git check out会回退到什么状态
场景一:test->第一次修改了test.txt文件
git checkout -- test.txt 回复到了原始的版本


场景二:test->第一次修改了test.txt文件->add
git checkout -- test.txt 回复到了第一次add的版本


场景三: test.txt->第一次修改test->add->第二次修改
git checkout -- test.txt  恢复到了第一次修改的版本


场景四: test.txt->第一次修改test->add->第二次修改->add
git checkout -- test.txt  恢复到了第二次修改的版本


场景五:test.txt->第一次修改->add->commit,提交到了版本库
git checkout -- test.txt 恢复了第一次修改的版本


场景六.test.txt->第一次修改test.txt->add->commit->第二次修改test.txt->add
git checkout -- test.txt 回复到了第二次修改的版本




命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),多次add的全部撤销
再看下面这几种场景下如何回复到原始的版本
场景一:test->第一次修改了test.txt文件
git checkout -- test.txt 回复到了第一次add的版本


场景二:test->第一次修改了test.txt文件->add
git reset HEAD file  命令git reset HEAD file可以把暂存区的修改撤销掉(unstage)
git checkout -- readme.txt


场景三: test.txt->第一次修改test->add->第二次修改
git reset HEAD file  命令git reset HEAD file可以把暂存区的修改撤销掉(unstage)
git checkout -- readme.txt


场景四: test.txt->第一次修改test->add->第二次修改->add
git reset HEAD file  命令git reset HEAD file可以把暂存区的修改撤销掉(unstage)
git checkout -- readme.txt


场景五:test.txt->第一次修改->add->commit,提交到了版本库
git reset --hard HEAD^


场景六.test.txt->第一次修改test.txt->add->commit->第二次修改test.txt->add
git reset --hard HEAD^

猜你喜欢

转载自blog.csdn.net/w450093854/article/details/70188800