基本配置
git --version
git version 2.20.1.windows.1
用户信息
配置个人的用户名称和电子邮件地址:
git config --global user.name "your_name"
git config --global user.email "your_email@domain.com"
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
config 的三个作⽤域,缺省等同于 local
git config --local
git config --global
git config --system
local只对仓库有效 global对登录⽤户所有仓库有效 system对系统的所有⽤户有效
查看配置信息
要检查已有的配置信息,可以使用 git config --list 命令:
git config --list
http.postbuffer=2M
user.name=your_name
user.email=your_email@domain.com
Git 基本命令
创建仓库命令
git init
初始化仓库
两种⽅式:
- ⽤ Git 之前已经有项⽬代码
cd 项⽬代码所在的⽂件夹
git init
- ⽤ Git 之前还没有项⽬代码
cd 某个⽂件夹
git init your_project #会在当前路径下创建和项⽬名称同名的⽂件夹
cd your_project
git clone
拷贝一份远程仓库,也就是下载一个项目
git clone [url]
git clone [url] another-name #默认情况下,Git 会按照你提供的 URL 所指向的项目的名称创建你的本地项目目录。 通常就是该 URL 最后一个 / 之后的项目名称。如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。
git clone --depth=1 [url] #--depth=1 表示只下载最近一次的版本,使用浅复制可以大大减少下载的数据量
git fetch --unshallow #如果之后又想获取完整历史信息,可以这样fetch
提交与修改
git add
添加文件到仓库
git add [file1] [file2] ... #添加一个或多个文件到暂存区:
git add [dir] #添加指定目录到暂存区,包括子目录:
git add . #添加当前目录下的所有文件到暂存区:
git status
查看仓库当前的状态,显示有变更的文件
git status
git status -s #获得简短的输出结果
git diff
比较文件的不同,即暂存区和工作区的差异。
git diff [file] #显示暂存区和工作区的差异
git diff --cached [file] #显示暂存区和上一次提交(commit)的差异:
git diff HEAD #查看已缓存的与未缓存的所有改动
git diff commitId1 commitId2 #显示两次提交之间的差异:
git diff commitId1 commitId2 -- file #指定文件的差异
git commit
提交暂存区到本地仓库。
git commit -m [message] #提交暂存区到本地仓库中
git commit [file1] [file2] ... -m [message] #提交暂存区的指定文件到仓库区
git commit -a #-a 参数设置修改文件后不需要执行 git add 命令,直接来提交
git commit -am "add 和 commit 二合一"
git commit --amend #改最近一次提交的msg,amend修正
git commit --allow-empty -m "empty commit" #空提交
git reset
回退版本。
#语法格式
git reset [--soft | --mixed | --hard] [HEAD]
#--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset [HEAD]
git reset HEAD^ # 回退所有内容到上一个版本
git reset HEAD^ <file> # 回退 hello.php 文件的版本到上一个版本
git reset 052e # 回退到指定版本
#--soft 参数用于回退到某个版本:
git reset --soft HEAD
#--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
git reset --hard #什么都不管,直接还原到指定commit,不写则还原到HEAD
git reset --hard HEAD
git reset –hard [commitId] # 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master # 将本地的状态回退到和远程的一样
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 类推...
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
- 以此类推...
git rm
删除工作区文件。
git rm <file> #将文件从暂存区和工作区中删除
git rm -f <file> #如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm --cached <file> #想把文件从暂存区域移除,但仍然希望保留在当前工作目录中
git mv
移动或重命名工作区文件。
git mv
git mv [file] [newfile]
git mv -f [file] [newfile] #文件名已经存在,但还是要重命名它,可以使用 -f 参数
提交日志
git log
查看历史提交记录
git log --oneline #--oneline 选项来查看历史记录的简洁的版本。
git log --reverse --oneline #--reverse 参数来逆向显示所有日志。
git log -n2 #查看最近两次修改
git log --all --grep=‘Merge’ #找包含Merge信息的提交
git blame
以列表形式查看指定文件的历史修改记录
git blame README
远程操作
git remote
远程仓库操作
git remote -v #显示所有远程仓库
git remote show [remote] #显示某个远程仓库的信息
git remote show https://github.com/tianqixin/runoob-git-test
git remote add [shortname] [url] #添加远程版本库
# shortname 为本地的版本库
git remote add origin git@github.com:tianqixin/runoob-git-test.git
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
git fetch
从远程获取代码库,该命令执行完后需要执行
git merge远程分支到你所在的分支。
# 假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:
git fetch [alias]
# 以上命令告诉 Git 去获取它有你没有的数据,然后你可以执行:
git merge [alias]/[branch]
git pull
下载远程代码并合并。其实就是 git fetch 和 git merge FETCH_HEAD 的简写
git pull <远程主机名> <远程分支名>:<本地分支名>
git push
上传远程代码并合并
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
#如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
git push --force origin master
# 删除主机但分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:
git push origin --delete master
分支管理
git branch
创建分支命令
git branch (branchname)
#没有参数时,git branch 会列出你在本地的分支。
#如果我们要手动创建一个分支。执行 git branch (branchname) 即可。
git branch testing
git branch
* master
testing
git branch -d (branchname) #删除分支
git checkout
切换分支命令
git checkout (branchname)
git checkout . #丢弃工作区所有的文件,使之和暂存区一样
git checkout file #丢弃指定文件,使之和暂存区一样
#创建并切换到iss53这个分支
git checkout -b iss53
git branch iss53#创建
#上面一条命令是下面两条命令的简写
git checkout iss53#切换
git merge
合并分支命令
git merge
你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。
git cherry-pick
指定的提交(commit)应用于其他分支
git cherry-pick <commitHash>
常用命令
git config --list //查看所有配置
git config --add --local <key> <value> //对当前仓库进行配置
git config --get <key> //获取配置值
git config --global //全局配置
git init //将已有项目加入git管理
git init myProject //创建myProject文件夹,并把它纳入GIT管理
git add [filename] //将文件或文件的改动纳入git管理
git add -u // 将所有修改添加到暂存区等待被提交
git mv file1 file2 //重命名文件
git rm <filename> //将文件从暂存区和工作区删除
git log --oneline //简洁地浏览变更历史
git log --all //查看所有分支的变更历史
git log --graph //增加分支视图
git checkout <branchName> //切换分支
git checkout -- [filename] //将工作区的修改撤销,恢复成和暂存区一致
git checkout -b <branch_name> <remote_repo> // 在本地仓库创建和远端仓库一样的分支,并关联起来,同时切换到该分支
git cat-file -t [hashcode] //查看对象的类型
git cat-file -p [hashcode] //查看对象的内容
git diff [commit1] [commit2] //比较两个commit之间的差异
git diff <分支1> <分支2> //比较分支1和分支2的差异
git diff //比较工作区和暂存区的差异
git diff -- [filename] //比较指定文件在工作区和暂存区的差异
git diff --cached //比较暂存区和HEAD的差异
git reset HEAD //将暂存区的修改撤销,恢复成和HEAD一致
git reset HEAD -- <filename> //将暂存区指定文件的修改撤销,恢复成和HEAD一致
git reset --hard <hashcode> //将hashcode之前的commit全部撤销,暂存区和工作区的相关记录也会同时被撤销,很危险的操作
git branch -d [branchName] //删除一个已经合并的分支
git branch -D [branchName] //强制删除一个分支,不管它是否已经合并
git commit --amend //修改上一次提交的变更说明
git commit -am //提交所有修改
git rebase -i [hashCode] //在该commit上进行重新奠基,其中,pick:保持该提交不变 reword:修改该提交的变更说明 squash:把该提交合并到上一次提交中
git rebase --abort //丢弃掉未完成的rebase操作
git stash //将当前暂存区的修改清空放到一个缓存堆栈中,有需要再恢复出来
git stash pop //将缓存堆栈中的修改恢复到暂存区,同时删除堆栈中该条记录
git stash apply //将缓存堆栈中的修改恢复到暂存区,但不删除堆栈中该条记录
git stash list //查看缓存堆栈中的记录
git clone <projectUrl/.git> <backupname.git> //将git项目备份到本地
git clone --bare <projectUrl/.git> <backupname.git> //将git项目备份到本地,不覆盖工作区
git remote -v //查看远端仓库
git remote add <remote_repo_name> <url> //添加远端仓库
git push origin <local>:<remote> //把本地修改提交到远端
git push <remote_repo_name> //把本地修改推到远端仓库
git push -f origin master //把远程分支强制回退到当前时间点
git pull //把远端分支的修改拉下来,并更新本地分支,包含了fetch和merge两个操作
git fetch //从远端拉去代码到本地
git merge <分支1> <分支2> //合并分支
git merge <远端分支> //合并远端分支