Git之路-2017年9月8日14:37:01

写在前面:

      主要参考廖雪峰考试的网站学习总结的,强烈推荐
       https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

1. Git是分布式版本控制系统;集中式的需要联网,分布式就是各自电脑都有一整套代码,保证了安全性,并且也可以设置一个各自修改然后上传统一地方--中央处理器,这样避免了各个电脑之间互传修改过的代码。大家只需要去中央处理器上去取就可以了。

2. 方便版本修改,版本修改都有记录;

3. git在linux上安装:sudo apt-get install git

4. 版本库resipotory----简单理解成一个目录,这个目录里面的所有文件都可以被git管理起来,每个文件的修改、删除,Git都可以跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原。

   如何创建版本库.....

5. (a) git status命令:让我们时刻掌握仓库当前的状态

    (b) git diff xxx命令:查看具体修改了什么内容

    (c) 提交到仓库:

           1)git add xxxx

            2)git commit -m "add distributed"

    (d) git log命令:显示从最近到最远的提交日志

          简化输出信息:git log --pretty==oneline(一行)

    (e) git退回到上一个版本: git reset --hard HEAD^

               HEAD:表示当前版本,也就是最新的提交

               HEAD^:上一个版本

               HEAD^^:上上一个版本

               往上100个版本:HEAD~100

       (f) git reflog记录你的每一次命令

       (g) 如果在回退以后,再想恢复,就必须找到想恢复文件之前的commit id

6. 工作区和暂存区

    工作区: 你的电脑里能够看到的目录 

    版本库:工作区里面的隐藏目录.git

    暂存区:Git版本库(.git)里存放的stage(或者叫index)

                 Git自动为我们创建的第一个分支master,以及指向master的一个指针叫HEAD

 

     git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

7. git跟踪并管理的是修改,而非文件

    第一次修改->git add->第二次修改->git commit  会提交第一次修改的,第二次修改的没有放在暂存区,因而不会被提交

8. git diff HEAD --readme.txt

     可以查看工作区和版本库里面最新版本的区别

9. 撤销修改:

            git checkout --file:可以放弃之前对工作区的修改

                                --:这个符号很重要,否则就变成了切换到另一个分支的命令

            git checkout -- readme.txt:把readme.txt文件在工作区的修改全部撤销掉,分为两种情况:

                  (1) readme.txt自修改过后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态

                  (2) readme.txt已经添加到暂存区后,又做了修改,现在,测下哦修改就回到添加到暂存区后的状态。

            git reset命令既可以回退版本,也可以吧咱出去的修改回退到工作区。

            git reset HEAD file;

10. 删除文件:

            (1) 直接在文件管理器中把没用的文件删了,或者用rm命令删了

            (2) Git知道删除了文件,因此工作区和版本库就不一致了

            (3) 现在的两个选择:

                     a) 确实要从版本库中删除该文件,git rm删掉然后git commit

                     b) 删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本

                         $git checkout -- test.txt

11. 远程仓库

      GITHUB:提供Git仓库托管服务的,只要注册一个GitHub账号,就可以免费获得Git远程仓库

      在自己的windows电脑上创建本地仓库时:

       git add file添加文件时出现这样错误:fatal: Not a git repository (or any of the parent directories): .git

                                                                 【解决办法】git init就可以了!

       

 1 Administrator@SZ-20170904JNLT MINGW64 /d/My Documents/Desktop
 2 $ cd D:\Git
 3 
 4 Administrator@SZ-20170904JNLT MINGW64 /d/Git
 5 $ cd ./Git
 6 
 7 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git
 8 $ mkdir learngit
 9 
10 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git
11 $ cd ./learngit
12 
13 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
14 $ git config --global user.name "wangfei"
15 
16 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
17 $ git config --global user.email "573003483@qq.com"
18 
19 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
20 $ touch readme.md
21 
22 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
23 $ git add readme.md
24 fatal: Not a git repository (or any of the parent directories): .git
25 
26 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit
27 $ git init
28 Initialized empty Git repository in D:/Git/Git/learngit/.git/
29 
30 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
31 $ git add readme.md
32 
33 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
34 $

【安装过程中出现的一些错误及解决办法】

Permanently added the RSA host key for IP address '192.30.252.130' to the list of known hosts.

服务器上刚刚装git,然后拷贝代码出现了上述的问题,这问题很好解决,在hosts文件中加入github.com就可以了

git bash 出现vim的时候怎么退出【类似于linux】

如果是输出状态,首先Esc退出输入状态,然后Shift+;,再输入q!或wq!(不保存改动,wq!是保存文件的写入修改)退出

http://blog.csdn.net/vosang/article/details/50499300

 

A. 如何将本地仓库的文件代码上传到远程仓库(Github)上面

 1 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
 2 $ touch secondReadme 6 
 7 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
 8 $ git add secondReadme
 9 
10 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
11 $ git commit -m 'second commit'
12 [master 585bf6c] second commit
13  1 file changed, 0 insertions(+), 0 deletions(-)
14  create mode 100644 secondReadme
15 
16 Administrator@SZ-20170904JNLT MINGW64 /d/Git/Git/learngit (master)
17 $ git push origin master
18 Counting objects: 28, done.
19 Delta compression using up to 4 threads.
20 Compressing objects: 100% (24/24), done.
21 Writing objects: 100% (28/28), 11.92 KiB | 1.99 MiB/s, done.
22 Total 28 (delta 1), reused 0 (delta 0)
23 remote: Resolving deltas: 100% (1/1), done.
24 To github.com:piaxiaohui/learngit.git
25    c56b809..585bf6c  master -> master

主要三步

             1)   git add    xxxx

             2)   git commit -m “注释”

             3)   git push origin master //push 推(上传)上去,推到远程仓库

 

提交到gerrit别的分支


$ git push origin master(或者HEAD):refs/heads/FreeWong_branch


 

B.从远程仓库下载到本地仓库

$ git clone git@github.com:piaxiaohui/FirstDownloadProject.git  

12. 分支管理:

       (1) 作用: 你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

        (2) 在Git里,master分支叫做主分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支

 

               新建分支dev,并让head现在指向dev,那么对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

            现在将分支合并,只需要将master指向dev的当前提交即可

 

相关命令:

         查看分支:git branch

         创建分支:git branch <name>

         切换分支:git checkout <name>

         创建+切换分支:git checkout -b <name>

         合并某分支到当前分支:git merge <name>

          删除分支: git branch -d <name>

13. 分支管理之解决冲突

14. 分支管理策略

     (1) 通常合并分支时,git会用 Fast Forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式(git merge --no-ff -m "merge with no-ff" dev),Git就会在merge时声称一个新的commot,这样从分支历史上就可以看出分支信息。

      (2) 分支策略:

                 1)master分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活

                  2)干活都在dev分支上,然后再合并分支

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

                          fast forward合并就看不出来曾静做过合并

15. bug分支

      每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后降临时分支删除

       命令git stash:把当前工作现场“存储”起来,等到以后恢复现场后继续工作

       命令git status:查看工作区

       命令git stash list:查看工作现场

       恢复之前的stash内容:

                       方式一:git stash apply: 但是恢复后,stash内容并不删除,需要用git stash drop来删除

                       方式二: git stash pop,恢复的同时把stash内容也删除了

        恢复制定的stash: git stash list

16. Feature分支:主要是用于为master分支添加一些新功能前创建的分支,如果功能接受,再合并

                             丢弃一个没有被合并过的分支,可以通过git branch -D<name>强行删除

17.多人协作

          (1) 查看远程库(origin)的信息 git remote/git remote -v(显示更详细的信息)

          (2) 推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支

                    $ git push origin master

           (3) master分支和dev分支需要时刻与远程同步,bug分支和feature分支不需要与远程时刻同步

           (4)当你的小伙伴要在远程dev分支上开发,就必须创建远程origin的dev分支到本地

                     $ git checkout -b dev origin/dev       

因此,多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

            如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch -     -set-upstream branch-name origin/branch-name

            这就是多人协作的工作模式,一旦熟悉了,就非常简单。

17. 标签管理

       发布一个版本时,我们通常现在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.

       Git标签虽然是版本库的快照,但其实他就是指向某个commit的指针.

       1-> Git中打标签流程

           (1) 首先,切换到需要打标签的分支上

                    git checkout xx(比如master)

            (2) 然后 git tag <name>

            (3) git tag 查看所有标签

            (4)给之前的commit打标签

                    1)先找到历史提交的commit id

                          git log --pretty=oneline --abbrev -commit

                    2 ) 然后 git tag v0.9 6224937[commit id]

              (5) 查看标签的详细信息:

                         git show <tagname>

              (6)可以创建带有说明的标签

                          $ git tag -a v0.1 -m “version 0.1 released” 3628164

                              -a:表示制定标签名

                              -m:指定说明文字

         2-> 操作标签

                1) 删除打错的标签:git tag -d v0.1

                2) 推送某个标签到远程: git push origin <tagname>

                     一次性推送全部尚未推送到远程的本地标签:git push origin --tags

                 3) 要删除远程的标签:

                                第一步,先从本地删除 git tag -d v0.9

                                第二步,再从远程删除 git push origin:refs/tags/v0.9<tagname>

                                 要看看是否真的从远程库删除了标签,可以登陆GitHub查看

                 4)要删除以后的GitHub的远程库:git remote rm origin

18.  自定义Git

      (1) 让Git显示颜色:

                             git config --global color.ui true

       (2) 忽略某些文件时,需要编写.gitignore【最好用文本编辑器创建】

       .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理

        (3)设置命令简写

                   单个单词命令:

                                      git st就能表示git status

                                      $ git config --global alias.st    status

                   多个单词命令:

                                       $ git config --global alias.usage 'reset HEAD'

          (4) 配置git的时候,加上--global时针对当前用户起作用的,如果不加,那只针对当前的仓库器作用

                     每个仓库的Git配置文件都放在.git/config文件中

                     当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

                                              

 

 

 

             

 

  

 

 

    

 

posted @ 2017-09-11 14:55  piaxiaohui  阅读(213)  评论(0编辑  收藏  举报