Git操作总结

配置篇

配置 user 信息

git config --global user.name ‘your_name’
git config --global user.email ‘your_email@domain.com’

config 的三个作用域

local:区域为本仓库
global: 当前用户的所有仓库
system: 本系统的所有用户

缺省等同于 local 

git config --local
git config --global
git config --system

显示 config 的配置,加 --list

git config --list --local
git config --list --global
git config --list --system

清除, --unset

git config --unset --local user.name
git config --unset --global user.name
git config --unset --system user.name

优先级

local > global > system 

Git 基本命令

1、Git 仓库

两种方式:

1. Git 之前已经有项目代码

cd 项目代码所在的文件夹
git init

2. Git 之前还没有项目代码

cd 某个文件夹
git init your_project #会在当前路径下创建和项目名称同名的文件夹
cd your_project

 2、往仓库里添加文件

 

git add . 将文件的修改,文件的新建,添加到暂存区。
git add -u 将文件的修改、文件的删除,添加到暂存区(不包含没有纳入Git管理的新增文件)。
git add -A 将文件的修改,文件的删除,文件的新建,添加到暂存区。

git add -A 相对于git add -u命令的优点 : 可以提交所有被删除、被替换、被修改和新增的文件到数据暂存区,而git add -u 只能操作跟踪过的文件
git add -A 等同于git add -all


git commit -m'提交文件的原因'
git commit -am'跳过add步骤,直接从工作目录提交到HEAD,不建议这样做'

git status 查看文件状态

 3、修改删除文件

git mv fileName1 fileName2  类似linux的文件移动
git rm fileName1 类似linux的文件删除

 4、查看提交历史

git log --all 查看所有分支的历史
git log --all --graph 查看图形化的 log 地址
git log --oneline 查看单行的简洁历史。
git log --oneline -n4 查看最近的四条简洁历史。
git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。
git help --web log 跳转到git log 的帮助文档网页

 5、文件对比

git diff  比较暂存区与工作区之间的差别
git diff filename  比较暂存区和工作区中filename文件的差异
git diff -–cached    比较暂存区和最新提交的版本差异
git diff -–cached filename 比较暂存区和最新提交的指定文件
git diff HEAD 直接比较工作区和最新提交之间的差异
git diff ffd98b291e0caa b8e7b00c02b 查看某两个版本之间的差异,注意MD5可以不写全,能标识出具体的commit即可
git diff ffd98b291e0caa6c335:filename b8e7b00c02b95b320:filename 查看某两个版本的某个文件的差异
git diff master branch -- filename 比较两个分支间某个文件的差异

6、分支的创建与删除

git checkout -b iss53
Switched to a new branch 'iss53'

这相当于执行下面这两条命令:

git branch iss53
git checkout iss53

删除分支

git branch -d branchName  未merged的分支,git会提示风险,删除失败
git branch -D branchName  这个是强制删除

推送分支到远程


git push  远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch 
git push -u origin/remote_branch  远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch 
git push origin local_branch:remote_branch  远程没有有remote_branch分支并,本地已经切换到local_branch

7、修改提交注释

git commit --amend  修改最新一次提交的message信息
git rebase -i b8e7b00c 修改之前提交的message信息,注意要选父的md5

8、整理commit提交记录

有时候多次提交到本地仓库,需要整理成一次提交到主仓库,就需要这个命令了

多个连续的commit合并

git rebase -i b8e7b00c 同上,要选多个合并的父md5,和修改的区别主要是命令内的执行,一个是s,一个是r

 如果是不连续的合并命令同上,但是pick要放在一起,并且只能所合并的commit只能有一个pick,其余都是s。如果是最早的commit没有父MD5,直接手打pick即可。

 9、代码恢复

将暂存区的代码恢复成最新提交

git reset HEAD -- <file>  暂存区的内容恢复成HEAD对应的内容,工作区的变更继续保留。
git reset HEAD -- <file> --hard,不管工作区还是暂存区,内容都变回HEAD对应的内容

 将工作区的内容恢复成暂存区的内容

git checkout -- <file>

总而言之,暂存区变更要用reset命令,工作区为checkout命令

将HEAD指向某次commit,本次后面的commit丢弃,同时暂存区和工作区也恢复为当前commit时的代码(比较危险,减少使用)

git reset --hard commit_id

 10、临时备份代码

有时候手头已经修改了一些代码,但是又不能提交。这时候又需要做一些其他的需求,这时候我们可以做临时代码的备份。当完成新需求后,在还原之前的代码。

git stash 备份工作区未提交的文件,并且将工作区恢复成HEAD
git stash apply  把备份的数据恢复到工作区,备份数据还在
git stash pop 把备份的数据恢复到工作区,删除备份数据

git stash list 可以查看备份的数据

11、忽略文件

把想忽略的文件添加到 .gitignore 文件中

doc 忽略doc文件夹和doc文件
doc/  忽略doc文件夹,但是doc文件还在git的管控下

12、备份拉取

克隆代码

git clone https://github.com/allanzhuo/yyblog.git

添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]:

git remote add yy https://github.com/allanzhuo/yyblog.git 在本地仓库添加一个远程仓库
git remote -v 显示对应的克隆地址

git push yy master 将本地master分支推送到远程分支
git fetch yy 拉取远程分支

13、把本地仓库同步到github

git remote -v 查看远程版本库信息
git remote add githup <url> 添加githup远程版本库
git fetch githup 拉取远程版本库
git merge -h 查看合并帮助信息
git merge --allow-unrelated-histories githup/master 合并githup上的master分支(两分支不是父子关系,所以合并需要添加 --allow-unrelated-histories)
git push githup 推送同步到githup仓库

多人协作开发

1、不同人修改了不同文件

两种合并方式,可以先fetch,再merge。或者直接pull,pull可以理解为fetch和merge两个步骤的合并

git fetch github
git merge dksajhifahiu
或
git pull github

2、不同人修改了同文件的不同区域

git有个很神奇的地方,即使修改同一个文件,只要是不在一个区域就不会产生冲突,这也是git相对svn的优点之一。

既然不会冲突,所以合并方式也就同上1了。

3、不同人修改了同文件的同区域

这样不可避免的就会产生冲突的,git并不会直接为我们解决冲突,需要我们手动处理冲突文件。

比如:

git fetch github
git merge dksajhifahiu
或
git pull github

后,处理具体冲突文件,然后重新

git commit 具体的文件即可。

4、同时变更了文件名和文件内容

说到这里,又是git的优点了,假如一个人修改了文件名,另外一个人在不知情的情况下,还在原文件名开发。当他push的时候自然会报错。但是当他使用

git pull

后,git会自动处理好文件合并的。

5、多人把同一个文件改成了不同的文件名

这种情况下,git就不知道怎么处理了。需求人工的接入。

这种情况下需要后面的冲突者处理。

git rm index.html
git add index1.html
git rm index2.html
git commit -am 'msg'

 

posted @ 2019-01-05 23:12  小卖铺的老爷爷  阅读(248)  评论(0)    收藏  举报


^
TOP