Git日常使用所需命令

Git的基本结构

在这里插入图片描述

初始化仓库:git init

git init:在当前目录创建git仓库

git init dir/a:在当前目录下dir文件夹的a文件夹下创建仓库,相当于git 帮忙执行了mkdir -p dir/a

查看状态:git status

git status 会显示当前目录的文件状态,一般有以下几种状态:

  • Untracked:未被追踪,新建的文件
  • Staged:在文件暂存区中,但是没有被提交,commit后将进入库中
  • Unmodify:处于本地库中,与工作目录中的文件完全一致
  • Modified:文件被修改,可以再次add,进入Staged状态(放到文件暂存区)

添加进暂存区:git add

新建文件,文件将处于未追踪(Untracked)状态。另外修改、删除文件后也需要git add操作,将这个操作记录到暂存区,然后再commit。(有些参数和命令可以隐式add)

  • git add file1 file2:将file1、file2添加进暂存区;
  • git add .:将当前目录所有文件添加进暂存区;

添加进本地库:git commit

  • git commit:将暂存区的所有文件添加进本地库
  • git commit file1 file2:有选择性的添加
  • git commit -a:如果对文件进行了修改或者删除,正常需要再add一次,添加-a ,则可以一次性提交。只对修改和删除的文件有效,如果是新建且没有add过的文件,仍旧需要add一次

如果不添加参数,输入git commit后,git的命令端会进入一个界面,需要手动输入本次提交的备注

  • git commit -m "备注":添加-m参数,不进入界面,直接添加备注
  • git commit --amend:对本次提交备注进行修改*(只能是最近一次的提交)*,该命令会进入文件内进行修改,wq保存退出即可。

删除文件:git rm

前面说了删除某个文件(使用rm删除的话),需要add再commit才行。

  • 即: rm a.txt->git add a.txt->git commit -m "delete a.txt"

使用git rm则不用再add一次了,直接commit即可。这个命令相当于隐式使用了git add。

  • 即: git rm a.txt->git commit -m "delete a.txt"

也可以commit的-a参数: rm a.txt->git commit -am "delete a.txt

查看操作记录:git log

在这里插入图片描述

git log可以查看之前的所有操作记录。需要关注红框里面的版本号。

版本回退:git reset

git reset 版本号:可以将当前代码回退到某次commit的版本。回退是一件危险程度较高的操作。git通过在git reset后面指定参数来指定回退的模式。

  • soft:移动指针,但工作区和暂存区都不发生变化
  • mixed:移动指针,但工作区不发生变化、暂存区会被清空,使用reset不带参数时,即为此模式
  • hard:移动指针,工作区和暂存区都会清空,如果存在未被commit的文件,则会丢失,是危险操作。使用此模式时可以先使用git stash保存一下。
  • keep:keep和merge属于hard的折中模式,对于新增的文件,回退的版本会删除,但是如果存在当前版本和回退版本都有的文件被修改的情况,那么该模式就无法使用。
  • merge:和keep差不多,唯一的区别是,存在当前版本和回退版本都有的文件被修改的情况,并且该文件修改之后被add进了暂存区,那么就可以reset

撤销commit:git revert

git revert <commitId>
如果想撤销某次commit,可以使用git revert
不过并不是真的直接撤销某次提交,而是把某次提交的记录撤回,整理成一个新的提交。
使用后,会在仓库里面多一条commit记录(该记录就是撤销的内容)。

查看所有历史记录:git reflog

  • 前面提到git log可以查看历史记录,但是只能查看Head指针以前的记录。比如进行git reset操作,Head指针发生了改变。那么就只能看见reset的版本之前的commit记录。
  • 使用git reflog则可以看见所有的操作记录。

文件暂存和恢复:git stash

需要进行一些敏感操作时,比如分支合并,远程拉取,版本回退时,可以使用git stash将当前版本的操作记录暂存到堆栈。 所有修改、删除、文件新增等操作都会回退到Head版本。

  • 如果文件只是新增却还没有git add,那git stash不会对它有用,因为该文件还没有被git追踪到)

  • gist stash list:查看堆栈中所有stash列表

  • git stash pop:将最新的stash内容应用到当前版本,并且移除该stash,默认为最近stash

  • git stash apply: 将最新的stash内容应用到当前版本,不移除该stash,默认为最近stash

补丁合并:git cherry-pick

git cherry-pick <commit version> :可以选择某个分支的一条或者多条 commit 记录,应用到当前分支,如果出现冲突需要手动解决

创建和切换分支:git branch 、git checkout

  • git branch:查看当前所属分支
  • git branch xx:新建xx分支
  • git branch -a:查看所有分支,包括远程分支
  • git branch -d <BranchName>:删除分支
  • git checkout xx:切换到xx分支
  • git checkout -b xx:新建并切换到xx分支

合并:git merge

get merge <branch>:将给定分支合并到当前分支
如果出现冲突,可以git merge --abort还原。

建立仓库联系 git remote

git remote add origin <url>:将远程地址与本地建立联系,供git fetch、git pull、git push等命令使用

抓取分支:git fetch

git fetch origin <branch>:抓取远程分支的最新版本(更新对应分支的commint Id)

  • 抓取之后可以使用git merge进行远程和本地的分支合并
  • 使用git fetch origin后会更新远程仓库的commit id到本地,并且也能查看到远程新增的分支。

比如使用git branch -r可以查看远程的分支,但是需要先fetch更新一下内容,不然是查看不到最新的内容的。

克隆仓库:git clone

git clone <url>:将远程仓库整个复制到本地

拉取仓库分支:git pull

git pull origin <branch>:拉取远程分支到本地并进行合并,如果有冲突,需要手动解决。
git pull=git fetch+get merge
git pull -r=git fetch+get rebase

推送仓库分支:git push

  • git push --set-upstream origin <branch>:首次推送分支时,需要使用–set-upstream指定当前分支对应的上游分支,后面就可以使用git push不带参数
  • git push origin --delete <branch>:删除远程仓库上面的分支
  • git push -f origin <branch>:强制推送到远程分支,一般是在本地分支记录落后于远程分支时使用,比如使用了reset操作,在多人合作时谨慎使用,因为可能导致他人提交记录被删掉。

合并多次提交、合并分支:git rebase

git rebase 可以将其它分支合并到当前分支,不同于git merge

  • git merge会比对两个分支以及共同的祖先版本,最终合并后新增一个commit 记录
  • git rebase则相当于是把待合并的分支与当前分支共同祖先之后的commit 打成一个接一个的patch(修改记录),最后更新到当前分支,期间可能会出现冲突,需要手动解决。并且最后不会生成额外记录。
    另外git rebase不仅可以合并分支,还可以合并或修改当前分支的commit记录。

git rebase -i HEAD~2:处理当前HEAD与它前面的commit 记录(可以修改和合并)
利用这个命令,可以做到修改较早版本的commit注释。也可以合并分支的多条记录。

出现冲突时,也可以使用git rebase --abort停止,或者解决后使用git rebase --continue继续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值