Git记录

git 记录

参考网址:http://http://www.liaoxuefeng.com/,里面的Git教程,学得很好,感谢廖老师的Git教程。

一、简单介绍

  • Git是分布式版本控制系统
  • 集中式版本控制vs分布式版本控制
    • 集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器
    • 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。
    • 集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。
    • 在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

二、安装记录

三、常用命令

1、设置用户名和邮箱。git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置

//
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

2、创建版本库

在合适的工作目录,创建文件夹,在创建的文件夹当前目录执行

git init

创建成功后,当前目录下多了一个.git的目录,这个目录默认是隐藏的

3、把文件添加到仓库,比如这里创建了一个文件readme.txt

git add readme.txt

4、把文件提交到仓库

git commit -m "first commit"

-m 后面输入的是本次提交的说明,方便后面查询提交记录,和方便其他人阅读

5、查看当前仓库的状态,可以显示改动了的文件

$ 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")

6、查看具体的改动

git diff readme.txt

通过这个命令可以显示具体修改的内容

7、查看历史提交记录

$ git log
commit cc592f6abc70df78d25713af7f3977f67d3d9d66
Author: cigar0223 <415718252@qq.com>
Date:   Wed Apr 19 16:00:06 2017 +0800

    add readme.txt

commit 0dba4155dc928b6d9e9be4a4fc4fb39cdd9433df
Author: cigar0223 <415718252@qq.com>
Date:   Wed Apr 19 15:57:37 2017 +0800

    first commit

加–pretty=oneline可以方便查看

$ git log --pretty=oneline
cc592f6abc70df78d25713af7f3977f67d3d9d66 add readme.txt
0dba4155dc928b6d9e9be4a4fc4fb39cdd9433df first commit

8、版本回退

$ git reset --hard HEAD^
HEAD is now at 0dba415 first commit

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git reset --hard 0dba41
HEAD is now at 0dba415 first commit

可以在–hard后面指定git log 查询出来的commit id,就可以指定到某一个版本,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号

9、查看当前文本内容

$ cat readme.txt
init

cat可以查看文件的内容

10、查询历史执行命令

$ git reflog
cc592f6 HEAD@{0}: reset: moving to cc592f
0dba415 HEAD@{1}: reset: moving to HEAD^
cc592f6 HEAD@{2}: commit: add readme.txt
0dba415 HEAD@{3}: commit (initial): first commit

11、查看工作区和版本库里面最新版本的区别

$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 5669882..b0dd824 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,5 @@
 init
 add
-modify
\ No newline at end of file
+modify
+
+log log
\ No newline at end of file

12、丢弃工作区的修改

git checkout -- readme.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

13、把暂存区的修改撤销掉(unstage),重新放回工作区

$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

14、删除一个文件

$ git rm second.txt
rm 'second.txt'

15、与远程仓库关联

git remote add origin https://git.coding.net/Cigar0423/gitStudy.git

16、把本地库推送到远程仓库

git push -u origin maste

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

git push origin master

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

17、从远程库克隆到本地

git clone https://git.coding.net/Cigar0423/gitStudy.git

18、创建并切换到分区

$ git checkout -b work
Switched to a new branch 'work'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

git branch work
git checkout work

19、查看当前分支

$ git branch
  master
* work

20、合并分支

$ git merge work
Updating 0d14e2b..e29e6eb
Fast-forward
 second.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 second.txt

合并分支要先切到最终要合并到的分支

21、删除分支

$ git branch -d work
Deleted branch work (was e29e6eb).

22、看到分支合并图

git log --graph

23、以强制禁用Fast forward模式合并分支

git merge --no-ff -m "merge with no-ff" work

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

24、把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash

查看存储的工作现场

git stash list

恢复工作现场,但是恢复后,stash内容并不删除

git stash apply

恢复后,删除stash内容

git stash drop

恢复的同时把stash内容也删了

git stash pop

25、强行删除未提交的分支

git branch -D work

26、查看远程库信息

git remote

27、显示远程库详细信息

git remote -v

28、推送分支,就是把该分支上的所有本地提交推送到远程库

git push origin master

29、从远程抓取分支

git pull

30、在本地创建和远程分支对应的分支

git checkout -b branch-name origin/branch-name

31、建立本地分支和远程分支的关联

git branch --set-upstream branch-name origin/branch-name

32、创建标签

git tag v1.0
git tag v0.9 6224937

v0.9后面是commit Id

33、查看所有标签

git tag

34、创建签名并指定标签信息

git tag -a v0.1 -m "version 0.1 released" 3628164

35、用PGP签名标签

git tag -s v0.2 -m "signed version 0.2 released" fec145a

36、查看标签信息

git show v0.9

37、删除标签

git tag -d v0.1

38、推送某个标签到远程

git push origin v1.0

39、一次性推送全部尚未推送到远程的本地标签

git push origin --tags

40、删除一个远程标签

git push origin :refs/tags/v0.9

41、让Git显示颜色,会让命令输出看起来更醒目

git config --global color.ui true

42、强制添加被.gitignore忽略的文件

git add -f App.class

43、检查忽略规则

git check-ignore -v App.class

44、

git config --global alias.st status

配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。配置文件放在.git/config文件中。

四、工作区和暂存区

1、工作区
就是我们在电脑里能看到的目录

2、版本库

  • 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区
  • 还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

3、流程

  • git add把文件添加进去,实际上就是把文件修改添加到暂存区
  • git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
  • 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改

五、忽略特殊文件

1、Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件

2、忽略文件的原则是:

  • 忽略操作系统自动生成的文件,比如缩略图等
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章