sudo apt install git
在从远程端clone等需要权限才可以操作,此时需要进行登录并输入账户名、邮箱、密码,操作较繁琐。
可以通过配置来达到只需要输入密码即可进行操作,后续也可以通过配置SSH直接免密操作。
(也可直接执行git config命令查看提示的指令)
config:配置git环境
–global:表示配置整个git环境,指定为全局配置,不使用该参数,则为当前所在仓库配置。
user.name及user.email后面的引号内填入远程端登录的账户名和密码。
# 设置全局用户名 第二行为例子
git config --global user.name "your name"
git config --global user.name "runoob" # 例子
# 设置邮箱 第二行为例子
git config --global user.email "your email"
git config --global user.email test@runoob.com # 例子
# 两种命令皆可
git config -l
git config --list

借用一下git教程——菜鸟教程的图,通过这张图可以大致清晰的了解add, commit, push, pull, fetch, clone, checkout 等指令具体是在工作区,暂存区、本地仓库及远程仓库哪个过程中实现的。
本节内容参考git教程
git init
git init newrepo # 在newrepo目录下生成git仓库
git clone和download zip的区别?
# 克隆代码仓库 例子如下
git clone <repo> # repo: Git仓库
git clone git://github.com/xxx/grit.git # 例子
# 从仓库克隆代码到指定路径,例子如下
git clone <repo> <directory> # directory: 本地目录
git clone git://github.com/schacon/grit.git mygrit # 克隆到mygrit目录下
在该部分一般有两种协议,http(s)和SSH,有什么区别?
git branch # 查看本地分支名
git branch -v # 查看相对详细的本地分支信息
git branch -a # 查看包括远程仓库在内的分支名
git branch -av # 查看包括远程仓库在内的分支信息
——创建分支有两种方法:
git branch (branchname)
git branch dev # 新建一个名称为 dev 的分支
git checkout -b (branchname)
git checkout -b dev # 新建 dev 分支,并切换到该分支上
git checkout (branchname)
git checkout master # 例子
注意:
git add . # 添加当前目录下的所有文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add test.c # 例子
git add [file1] [file2] ... # 添加一个或多个文件到暂存区
git add --all # 将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。还会把删除的文件也提交进去
git status
git status -s # 获得简短的输出结果
# AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动。
git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。
git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。
git diff 和git status区别:
git status 显示你上次提交更新后的更改或者写入缓存的改动文件名。
而 git diff 一行一行具体显示这些改动。
# 查看版本库中所有的改动
# 尚未缓存的改动
git diff
git diff [file] # 查看具体文件的改动
git diff Readme.md # 查看具体文件的改动的例子
# 显示暂存区和上一次提交(commit)的差异
# 查看已缓存的改动
git diff --cached
git diff --staged [file]
# 查看已缓存的与未缓存的所有改动
git diff HEAD
# 显示摘要而非整个 diff
git diff --stat
# 显示两次提交之间的差异
git diff [first-branch]...[second-branch]
git commit # 如果暂存区有文件,则将其中的文件提交到仓库
git commit -m [message] # [message] 是备注信息
git commit [file1] [file2] ... -m [message] # 提交暂存区的指定文件到仓库区
git commit -a # 跳过git add 命令,直接来提交
git commit --amend # 重写上一次的提交信息(不会生成新的版本号)
git push 命令用于从将本地的分支版本上传到远程并合并。
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master
git push <远程主机名> <本地分支名>
git push origin master:master
# 慎用:本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
git push --force origin master
# 删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:
git push origin --delete master
# 在将本地的 master 分支推送到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
git push -u origin master # 第一次推送时使用,可以简化后面的推送或者拉取命令使用
情况一:
直接在工作区修改代码后,发现所在的分支不是要提交的分支(比如直接修改的话,可能是在不允许提交的比如主分支进行了修改),需要切换分支。
情况二:
在工作区已经修改了部分代码,但别的分支忽然有bug需要去修改。
git stash
git checkout <对应分支>
git stash pop
# 情景:修改-储藏-再修改-再储藏——两次
# 标记此次储藏,以便后期查看
git stash save [stashMessage]
git stash save 'add addAge method' # 例子
# 查看储藏列表
git stash list
# 取出指定index的储藏的修改到工作区中
git stash apply stash@{index}
git stash apply stash@{1} # 例子
# 将指定index的储藏从储藏记录列表中删除
git stash drop stash@{index}
# 情况:只提交特定文件,其他改动后续需要
git add --patch foo # 只将第一部分加入管理the index
git stash save --keep-index # 将其余部分保存起来
git stash drop 名称 # 从堆栈中移除某个指定的stash
git stash clear # 清除堆栈中的所有内容
git stash show # 查看堆栈中最新保存的stash和当前目录的差异
可以使用 git reset --hard ,即可撤销 git stash pop 操作,将当前分支状态恢复。
而该操作后,git stash 暂存区的记录也不会被删除,可通过 git stash show/git stash list查看。可以重新切换到自己分支并重新git stash pop
reset参数是重置命令:
主要为 git reset [head],加上一些参数。
git reset [--soft | --mixed | --hard] [HEAD]
git reset [HEAD] # 可以指定退回某一次提交的版本
git reset --soft HEAD
git reset --hard HEAD
# 例子
git reset --hard HEAD~3 # 回退上上上一个版本
git reset --hard 'commit_id' # 会退到 commit_id 指定的提交版本
git reset --hard origin/master # 将本地的状态回退到和远程的一样
# 回退后返回未来的版本
git reflog # 查看当前版本库的提交历史
git reset --hard 'commit_id'
可以看到每次提交的 ID,是一个字符串。
参数:
git log # 查看历史提交记录
git log <file> # 查看具体文件的提交记录
git blame <file> # 以列表形式查看指定文件的历史修改记录
git log --pretty=oneline # 单行显示提交历史记录的内容
当我们在工作中修改了一个文件,但是发现内容好像改的不对,想重新修改,这个时又不知道自己改了什么代码,想撤销修改,可以使用git checkout – 来将文件切换到最近一次的状态。
git checkout -- <file> # 丢弃某文件的修改(撤销修改)
git checkout -- Readme.md # 如果 Readme.md 文件在工作区,则丢弃其修改
git checkout -- . # 丢弃当前目录下所有工作区中文件的修改
只能删除已经提交到版本库中的文件。
git rm <file> # 删除已经被提交过的文件
git rm Readme.md # 删除已经被提交过的 Readme.md
git branch -d dev # 删除 dev 分支
git pull = git fetch + git merge
git pull <远程主机名> <远程分支名>:<本地分支名>
# 例子
git pull origin master:brantest # 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
# 取回 origin/master 分支,再与本地的 brantest 分支合并。
git pull origin master # 远程分支与当前分支合并,则冒号后面的部分可以省略。
git fetch [alias] # 配置好远程仓库并想要提取更新的数据
git merge [alias]/[branch] # 以上命令将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。
当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名就可以了
(merge即是将对应分支的代码合并到本分支下,是从远端两个已提交的最新代码进行合并的,所以不需要add,commit和push即可完成)
git checkout master # 进入master分支
git merge dev # 自动将远程端的dev的代码合并进master分支中
git remote add origin git@github.com:beiszhihao/test.git
git push -u origin master
git remote -v # 显示所有远程仓库
git remote show [remote] # 显示某个远程仓库的信息
git remote add [本地的版本库] [url] # 添加远程版本库
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
git remote prune origin # 使用prune参数刷新本地分支仓库
Git教程详细版
关于Git这一篇就够了
git教程
git stash 命令
git stash pop 后有冲突时,如何撤销