Git的使用

 

1 . 版本库 (Repositoryy)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。(通过命令ls -ah 可以看到)

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

常用命令:

Git bash常用命令:
git config --global user.name "name"    # 配置全局的用户名,电脑上所有Git仓库都使用这个配置
git config --global user.email "email"  # 配置全局邮箱
git init                                    # 创建一个空的版本库
git add test.py                            # 将文件加入到版本库的暂存区
git commit -m "commit a python file"    # 将暂存区的所有内容提交到当前分支 (后面的字符窜是解释当前提交的意图)
git status                                # 当前工作区和缓存区的状态
git diff test.py                         # 若对test.py文件修改,可查看修改后的不同
git add .                                # 把当前目录下所有改动的文件添加到暂存区 (或将当前目录下未加入的文件添加到缓存区)
git log                                 # 显示最近到最远的commit提交日志
git log --pretty=oneline                # 作用同git log,一行显示一条commit记录
git reset --hard HEAD^                    # 将当前分支回滚到上一个版本(HEAD为当前版本,即最后一次commit,HEAD^ 上一版本,HEAD^^ 倒数第二个版本,HEAD~4 倒数第四个版本)
git reset --hard 4596780                # 将当前分支回滚到commit id=4596780对应的版本 (commit id可以通过git log命令显示,这里4596780只是id的前七位)
git reset HEAD test.py                    # 把暂存区的test.py文件的修改撤销掉,回到工作区
git reflog                                # 显示提交的所有命令日志
git checkout --test.py                    # 撤销对文件所做的修改(回到最后一次git add或git commit 状态)
git checkout --test.py                    # 也可以将删除的文件恢复到最新版本                                        
git rm test.py                            # 删除版本库的文件,随后需要git commit -m 提交

 

2 . 创建分支和合并 (branch)

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

 

 

从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

当两个分支masterfeature1各自都有新的提交,变成了这样:

这种情况下无法快速合并,合并时会出现冲突,需要手动修改冲突后再提交修改,就会变成这样:

 

常用命令:

分支
git checkout -b dev                     # 创建dev分支,并切换到该分支
git branch dev                            # 创建dev分支
git checkout dev                         # 切换到dev分支
git branch                                 # 查看当前分支
git merge dev                             # 将dev分支的内容合并到当前分支
git branch -d dev                         # 删除分支 dev
git stash                                # 封存当前状态,将其单独储存起来
git stash list                             # 查看封存的工作状态
git stash apply                         # 恢复封存的工作状态,但并不删除储存的状态内容
git stash drop                            # 删除封存时储存的状态内容
git stash pop                            # 恢复封存的工作状态,并删除储存的状态内容
git stash apply stash@{0}                # 恢复指定的stash (通过git stash list查看所有封存的stash)

 

3. 远程仓库github

在github创建一个空仓库gitDemo后,可以从这个仓库克隆到本地仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。在github上也可以克隆别人的仓库到自己的仓库,再克隆到本地,状态类似如下:

在本地仓库的修改提交后,可以推送到远程仓库进行同步,但只能推送到自己的远程仓库,这样多人协作时可以都提交自己的本地修改,并和远程仓库保持同步。

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

  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-to=origin/branch-name branch-name,将本地分支和远程分支建立关联。)

常用命令:

远程仓库
git remote add origin https://github.com/silence-cho/gitDemo.git  #在远程添加origin 版本库
git push -u origin master                                          # 将本地仓库和远程origin关联起来
git push origin master                                               # 将本地master分支推送到远程库对应分支(本地修改提交本地库后,再同步)
git push origin dev                                                  # 将本地dev分支推送到远程库
git clone https://github.com/silence-cho/gitDemo.git              # 将远程库克隆到本地 (未建立本地库时)
git remote                                                           # 查看远程库信息
git remote -v                                                      # 查看远程库,信息更详细
git pull                                                           # 将远程仓库分支的更新同步到本地仓库分支
git pull origin master --allow-unrelated-histories                  # 将远程master分支更新同步到本地仓库,并允许合并不相关的历史记录(若git pull时提示:refusing merge unrelated histories,采用此命令)
git branch --set-upstream-to=origin/dev dev                       # 将本地分支dev和远程dev分支(origin/dev)关联。(git pull提示“no tracking information”,表示本地仓库没有分支和远程仓库的dev分支关联,本地需要设置一个关联分支)

 

4,Git bash实战记录

将本地的tests.py文件加入到本地仓库,并推送到远程仓库,记录了一次较为艰难的过程

加入本地仓库:

推送远程仓库:

 

参考博客:

1,https://www.cnblogs.com/alex3714/articles/5930846.html

2,https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

posted @ 2018-10-11 22:49  silence_cho  阅读(386)  评论(0编辑  收藏  举报