【git-RUNOOB】git笔记(和mecurial有些相似)-git配置,工作区,暂存区,版本库,基本操作及分支管理
资料来源
(1) 芯片开发必备工具 | 版本控制系统,该用Git还是SVN? (qq.com)
(2) runoob.com
(4) http://gitref.justjavac.com/index.html
(5) 【未阅】https://blog.csdn.net/qq_32452623/category_9270388.html
(6) 【未阅】https://xueying.blog.csdn.net/article/details/118162471?spm=1001.2014.3001.5502
注1:一定要实战!!!实战能更好理解每个cmd的作用及使用格式!!!
1.git配置
(1) git config用来配置或读取相应的工作环境变量;
(2) 配置个人用户名称和电子邮件地址等信息
1 //用户信息 2 git config --global user.name "runoob" 3 git config --global user.email test@runoob.com 4 5 //文本编辑器 6 git config --global core.editor gvim 7 8 //差异分析工具 9 git config --global merge.tool gvimdiff
注1: git config color.ui true可以使能彩色的git输出;
注2: git config format.pretty oneline显示历史记录时,每个提交的信息只显示一行;
(3) 查看配置信息
1 //查看已有配置信息 2 git config --list 3 4 //查看某个环境变量的设定 5 git config 环境变量名,如user.name
2.git工作区、暂存区和版本库
(1) 工作区:本地工作目录;
(2) 暂存区:本地工作目录内的.git目录中的index文件,即.git/index;
(3) 版本库:工作区内的隐藏目录.git;
3.git基本操作
3.1 git init--创建仓库
1 //把当前目录作为git仓库 2 git init 3 4 //将指定目录作为git仓库 5 git init dir_name 6 7 //往git仓库中添加文件 8 git add file1 9 ... 10 git add filen 11 git commit -m "initialize git repo"
3.2 git clone--克隆git资源作为工作目录
1 //克隆git仓库到当前目录 2 git clone <repo> 3 4 //克隆git仓库到指定目录 5 git clone <repo> <directory>
3.3 git add-在克隆的资源上添加或修改文件
(1) git add将文件添加到暂存区;
(2) 使用格式
1 //添加一个或多个文件到暂存区; 2 git add [file1] [file2] ... 3 4 //添加指定目录到暂存区,包括子目录; 5 git add [dir] 6 7 //添加当前目录下的所有文件到暂存区; 8 git add .
3.4 git status--提交改动前查看修改
(1) 用于查看上次提交之后,是否有对文件进行修改;
(2) 使用格式
1 git status 2 3 //使用-s参数获取简短的输出效果; 4 git status -s
3.5 git commit--提交修改
(1) 使用 git add 命令将内容写入暂存区,git commit 命令将暂存区内容添加到本地仓库中(仓库分本地仓库和远程仓库);
注1:现在代码仅仅到达本地仓库,还没有到达远程仓库;
(2) 命令格式
1 //-m为message选项,后跟备注信息; 2 git commit -m [message] 3 4 //提交暂存区的指定文件到仓库区; 5 git commit [file1] [file2] ... -m [message] 6 7 //-a 参数设置修改文件后不需要执行 git add 命令,直接来提交; 8 git commit -a
(3) 设置提交代码时的用户信息
1 git config --global user.name 'runoob' 2 git config --global user.email test@runoob.com
注1:如果去掉 --global 参数只对当前仓库有效;
3.6 git diff-比较文件差异
(1) git diff:比较暂存区与工作目录的差异;
git diff --cached:显示暂存区和上一次提交的差异;
git diff HEAD:显示工作目录和上一次提交的差异;
git diff changelist_id:显示某一次提交和工作目录的差异;
git diff changelist_id1 changelist_id2:显示两次提交之间的差异;
(2) 使用格式
1 //显示暂存区和工作区的差异(比如本地目录下文件改动后,没有采用git add操作); 2 git diff [file] 3 4 //显示暂存区和上一次提交(commit)的差异; 5 git diff --cached [file] 6 或 7 git diff --staged [file] 8 9 //显示两次提交之间的差异; 10 git diff [first-branch]...[second-branch]
3.7 git reset--回退版本
(1) 用于回退版本,可以指定退回某一次提交的版本;
(2) 使用格式
3.8 git rm--将文件从暂存区和工作区删除
(1) 使用格式
1 //将文件从暂存区和工作区中删除(比如一个文件不再需要track); 2 git rm <file> 3 4 //使用-f选项删除之前修改过并且已经放到暂存区域的文件; 5 git rm -f <file> 6 7 //使用--cached选项仅将文件从暂存区域移除,但仍保留在当前工作目录中; 8 git rm --cached <file> 9 10 //递归删除整个目录中的所有子目录和文件; 11 git rm –r *
3.9 git mv--移动或重命名工作区文件
(1) 用于移动或重命名一个文件、目录或软连接;
(2) 使用格式
1 git mv [file] [newfile] 2 3 //如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数; 4 git mv -f [file] [newfile]
3.10 git log--查看历史提交记录
(1) git log;
(2) git log --oneline用于查看历史记录的简洁版本;
(3) git log --graph可以查看历史中什么时候出现了分支、合并操作;
(4) git log --reverse --oneline用于逆向显示所有日志(所谓逆向,指的是第一次改动到最近的改动);
(5) git log --author=author_name用于只查找指定用户的提交日志;
3.11 git blame <file>--以列表形式查看指定文件的历史修改记录
3.12 git remote
(1) 和远程仓库相关的操作;
(2) 使用格式
1 //显示所有远程仓库; 2 git remote -v 3 4 //显示某个远程仓库的信息 5 git remote show [remote],如git remote show https://github.com/tianqixin/runoob-git-test
1 //添加远程版本库,建立local仓库与远程仓库的连接,git remote add操作后,需要执行git push操作; 2 git remote add [shortname] [url],如git remote add origin git@github.com:tianqixin/runoob-git-test.git 3 4 //删除远程仓库; 5 git remote rm name 6 7 //修改仓库名; 8 git remote rename old_name new_name
注1:git remote add的使用分为两种情况,已测试;
(a)使用git init操作创建local仓库后,可以通过git remote add origin [url]建立local仓库和已有的远程仓库的连接(注意该种情况下,远程仓库已存在);
(b)使用git init操作创建local仓库后,可以通过git remote add origin [url]建立local仓库和不存在的远程仓库的连接(注意该种情况下,会自动创建远程仓库);
注2:git remote rm name切断本地仓库和远程仓库的连接;
注3:git remote rename old_name new_name改变远程仓库的主机名;
3.13 git fetch
(1) 用于从远程仓库获取代码;
(2) 使用 格式及示例:
1 //step1:从远程仓库获取数据到本地仓库,git fecth后面可以跟远程主机名(如origin),也可以不跟; 2 git fetch 3 4 //step2:采用git checkout branch与git merge将远程分支合并到你所在的任意分支; 5 git checkout master 6 git merge branch_name
3.14 git merge
注1:git merge是将当前提交和另一个提交以及它们的共同祖父节点进行一次三方合并;
注2:git merge可以将git fetch从远程仓库获取的代码更新到本地工作目录,如git merge origin/master或git merge origin master;
(1) 合并其他分支到当前分支(如master),合并分两种:
(1.1)将本地branch合并到本地master分支(git merge branch_local),然后git push origin master;
(1.2)将远程分支合并到本地master分支(git merge origin branch_remote),然后git push origin master;
(2) git merge操作后,可能存在conflicts,这种情况下,需要手动merge,然后对手动merge的文件执行git add filename操作;
3.15 git pull
(1) git pull=git fetch+git merge;
(2) git pull的作用是在当前工作目录中,获取(fetch)并合并(merge)远端的改动;
注1:类似git merge, git pull也存在两种情况,一种是直接的git pull,另外一种是git pull origin branch_name;
3.16 git push
(1) 该命令用于从将本地的分支版本上传到远程并合并;
(2) git push <远程主机名> <本地分支名>:<远程分支名>,如果本地分支名与远程分支名相同,则可以省略冒号:及其后的内容,即git push <远程主机名> <本地分支名>;
1 //下面两条命令含义与作用相同,即将本地的master分支推送到origin主机的master分支; 2 git push origin master:master 3 git push origin master 4 5 //如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数; 6 git push --force origin master 7 8 //删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支; 9 git push origin --delete master
3.17 git checkout
(1) git checkout -- filename可以将本地仓库中的最新内容替换掉工作目录中的文件,用来丢弃本地修改;
(2) git checkout branch_name用于切换分支;
(3) git checkout 版本号可用于切换到某一历史版本;
3.18 git reset
(1) git fetch + git reset --hard origin/master可以获取远程仓库最新版本,丢弃本地的所有改动和提交;
3.19 git blame
(1) git blame+文件名,查看文件每一行上一次修改对应的版本号以及改动者;
4.git分支管理
(1) 使用分支意味着从开发主线上分离开来,同时不影响主线继续工作;
(2) master是默认的分支,在其他分支上进行开发,完成后再将它们合并到主分支上;
4.1 git branch-创建分支
1 git branch branch1 2 3 //使用git branch查看现有branch 4 git branch
注1:分支的创建基于当前所在的分支,创建分支时一定要注意是要基于那个分支进行的分支创建;
注2:git branch -a列出本地分支和远程分支(-a:all);
注3:git branch 列出本地分支,并在当前分支前加"*"号;
注4:git branch -r列出远程分支(-r:remote);
4.2 git checkout-切换分支
1 //切换到branch1分支 2 git checkout branch1 3 4 //切换到master分支 5 git checkout master
4.3 git checkout -b branch_name-创建并切换分支
1 git checkout -b branch_name
注1:git checkout -b mybranch origin/mybranch取远程分支,分化一个新的分支到本地,并切换到该新分支;执行git pull,本地才有了完整的对应分支;
4.4 git merge-合并分支
1 //切换到master分支 2 git checkout master 3 4 //将分支branch1 merge到主分支 5 git merge branch1
注1:如果git merge过程中,文件存在内容冲突,那么需要进行手动修改;修改后,需要采用"git add 文件名"告诉git文件冲突已经解决,然后执行"git commit"操作;
4.5 git branch -d -删除分支
1 //罗列branch 2 git branch 3 4 //删除分支branch1 5 git branch -d branch1 6 7 //罗列branch 8 git branch
4.6 git push origin branch_name
(1) 该操作将分支推送到远端仓库,不然该分支不为其他人所见;
(2) 注意远程origin/branch_name中的branch_name一定要与本地branch的branch_name相同,如本地除master分支外,新创建一个branch_new分支,那么将该分支推送到远端仓库,需要执行git push origin branch_new;
4.7 git push origin --delete branch_name
(1) 删除远程分支;
4.8 git remote prune origin
(1) 已经将远程仓库中的分支删除了,但是本地执行git branch -a或git branch -r时,还能看到被删掉的远程分支,这种情况下,可以执行git remote prune orgin;
4.9 git remote update origin
(1) 新建远程分支后,本地看不到,可以执行git remote update origin操作;