Git笔记

276 阅读9分钟

基本配置

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

初始化仓库

两种⽅式:

  1. ⽤ Git 之前已经有项⽬代码
cd 项⽬代码所在的⽂件夹
git init 
  1. ⽤ 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 fetchgit 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 <远端分支>  //合并远端分支