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
分支:
当两个分支master
和feature1
各自都有新的提交,变成了这样:
这种情况下无法快速合并,合并时会出现冲突,需要手动修改冲突后再提交修改,就会变成这样:
常用命令:
分支 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上也可以克隆别人的仓库到自己的仓库,再克隆到本地,状态类似如下:
在本地仓库的修改提交后,可以推送到远程仓库进行同步,但只能推送到自己的远程仓库,这样多人协作时可以都提交自己的本地修改,并和远程仓库保持同步。
多人协作的工作模式通常是这样:
-
首先,可以试图用
git push origin branch-name
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
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