git
git是一个版本控制工具,是为了更好好的帮助程序员进行版本控制以及协同开发。
github
是一个面向开源及私有软件项目的托管平台。因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
已提交(committed)
已提交表示数据已经安全的保存在本地数据库中。
已修改(modified)
已修改表示修改了文件,但 还没保存到数据库中。
已暂存(staged)
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次 提交的快照中。
工作目录
工作目录是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候 也被称作"索引",不过一般说法还是叫暂存区域。
Git仓库
Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。
可以从网站:https://git-scm.com/downloads 下载相应的安装包。
安装包直接安装,一步步走即可,会自动配置环境变量,否则自己在path中添加环境变量。
git 自带一个git config 的工具来帮助设置git外观和行为的配置变量。这些变量存储在三个不同的位置。
/etc/gitconfig
该文件包含了适用于系统所有用户和所有库的值。~/.gitconfig
该文件在用户目录下,是针对用户的配置。.git/config
该文件在具体项目中的一个隐藏文件夹.git中。是针对该项目的具体配置。安装好Git后,需要设置自己的用户名和邮箱地址。每次Git提交都会使用该信息。
#设置提交人的信息,只对以后的提交生效,如果没有--global选项,则只是在该项目中生效。
$ git config --global user.name "yourname"
$ git config --global user.email [email protected]
对于比较复杂的命令,可以设置别名,方便记忆以及操作。对于
git commit -m message
来说,该命令显得有些难记,不想敲那么多字,可以通过设置别名来简化命令。
$ git config --global alias.cm 'commit -m'
$ git cm message
配置好设置后,可以在用户目录下的
.gitconfig
文件中查看,其中配置如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qrcx2mwM-1573130895932)(./1531186114453.png)]
$ git init
$ git clone URL
# 生成一个文件
$ echo "#notes" >> readme.md
$ git status
# 跟踪新文件,git add 后面如果是路径则递归的追踪
$ git add readme.md
# 追踪当前路径下所有文件
$ git add .
# 追踪所有文件
$ git add *
有时候不小心多添加(add)了一些文件,想要取消添加,则可以使用以下命令阿里取消暂存文件!
# 取消暂存文件,即不提交该文件
$ git reset HEAD <file>
$ #移除文件 -f 强制删除
$ git rm stdout.log
$ #移动文件(可以用来修改名称)
$ git mv fileFrom fileTo
$ #查看日志
$ git log
$ #提交更新
$ git commit -m "commit message"
$ #只要加上-a选项,git 会自动将已追踪文件暂存并提交,从而跳过 git add这一步。
$ git commit -a -m "commit message"
#带有 --amend 的命令会尝试重新提交,第二次提交的会覆盖原来的提交信息,最终只有一个提交。
$ git commit --amend
#将本地仓库推送为远程仓库
$ git remote add origin https://github.com/Zeppole/test
#将本地修改推送到远程仓库的master分支
$ git push origin master
# 切换分支
$ git checkout branch-a
# 创建分支并切换
$ git checkout -b branch-b
# 只创建分支,不切换
$ git branch branch-c
# 更新分支
$ git pull origin 当前分支
# 合并分支,将branch-d分支合并到当前分支上
$ git merge branch-d
# 合并后需要推送到远端
$ git push origin 当前branch
# 拉取全部远端分支到本地,即更新本地分支为最新内容
$ git fetch
# 更新指定分支到本地
$ git fetch origin 分支名称
git pull 可以理解为 git fetch + git merge
即git fetch 直接拉取分支,git pull 拉取分支并自动合并,git fetch +git merge 有可能会产生冲突,需要手动解决。
git在当前分支有修改并且未提交的内容时,是不允许切换分支的,但是如果此时并不想将改了一半的内容提交怎么办?可以使用git的储藏功能,将修改内容储藏,这样便可以切换到其他分支,操作完成后在返回到该分支恢复储藏即可。
# 将修改内容储藏,保存当前的工作现场
$ git stash
# 查看现有 stash
$ git stash list
# 恢复储藏内容,并删除该储藏
$ git stash pop stash@{0}
.gitignore文件,记录着不交由Git来管的文件,即不提交的文件,一般为日志文件,target文件等。
但是在项目初期,并没有创建.gitignore文件,后期发现有些文件根本不需要提交,新创建一个.gitignore文件,或者是在.gitignore文件中后加上的忽略文件,这时候这些文件已经提交了,这时候创建的.gitignore文件规则对于这些 tracked 文件无效。
其实.gitignore文件只会忽略那些没有被 track(追踪)的文件,这时候如果需要取消追踪这些文件,可以执行以下命令,从缓存中删除对该文件的追踪,例如:
$ git rm --cached -r .idea
git rm --cached 与 git rm 的区别
git rm 删除缓存区的文件,同时工作区也不需要这个文件的时候,可以使用 git rm,例如过时的文件
git rm --cached 停止追踪文件,但是工作区还需要这些文件,例如 .idea 文件夹,此时可以使用 git rm --cached 命令
$ git fetch -a 同步远端分支到本地
$ git branch -d (删除本地分支)
$ git push origin --delete
$ git fetch -p(删除没有对应远端的本地分支)
分支之间不要用拷贝的方式来共享文件,如果分支间需要有共享的文件,可以使用merge的方式来合并分支。可是如果多个人对同一个文件的同一个地方进行了修改,则会出现冲突报错,此时需要做的便是解决冲突,重新提交。
$ git merge master(将master合并到当前分支)
解决冲突问题。如果发现git锁死不能提交,则需要删除记录文件。此步骤不是必须的
$ cd .git
$ rm MERGE_HEAD
$ git add .
$ git commit -m "合并master,解决冲突"
$ git push origin branch
参考文献: