GIT常用操作
-
初始化仓库:
git init在当前目录下创建.git目录,同时当前目录成为一个Git仓库。 -
下载代码
git cloneGit仓库url:将http或ssh链接指向的Git仓库拷贝到本地。 -
git add 文件:将文件添加到缓存区,该文件被标记为被追踪。 -
添加到暂存区
git add .:缓存当前目录下所有文件,不包括已删除的文件。 注意,git add只是复制一份当前状态下的该文件到缓存区,该文件之后的修改若不重新git add,则提交的时候,只会将上次git add的缓存提交给仓库。 -
提交到远程仓库
git commit -m "本次提交说明":一次性将缓存区所有文件修改提交到仓库的当前分支。 -
git commit -am "本次提交说明":自动把所有已经跟踪过(经过 git add 提交)的文件缓存,并提交到仓库。常用于跳过git add步骤快速提交。【说明】:第一次创建的文件必须通过 git add 提交(文件被标记为被追踪),第二次提交可以直接通过 git commit -am '' 提交,跳过 git add 步骤。
-
git commit --amend "本次提交说明":重新提交。此次提交代替上一次提交的结果。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。 git add是工作区->缓存区,git commit是缓存区->仓库。 -
查看状态
git status:显示当前仓库的最新状态。 -
git status -s:当前仓库的最新状态的简介。 -
git diff:比较工作区和缓存区的不同。 -
git diff --cached:比较缓存区和仓库的不同。 -
git diff 文件:比较指定文件在工作区和缓存区的不同。 -
git diff 文件 --cached:比较指定文件在缓存区和仓库的不同。 -
git show:查看最后一个提交的内容。 -
git show HEAD~1:查看倒数第二个提交的内容。 -
git show 提交版本号:查看指定提交的内容。 -
查看暂存区提交
git ls-files- --cached (-c) 查看暂存区中文件,git ls-files 命令默认是此命令
- --midified (-m)查看修改的文件
- --delete (-d)查看删除过的文件
- --other (-o)查看没有被git跟踪的文件
- --stage (-s) 显示mode以及文件对应的Blob对象,进而我们可以获取暂存区中对应文件里面的内容。
-
git rm 文件:把文件从版本库中删除,不再跟踪。 -
将文件从暂存区删除
git rm -f 文件:当文件有未提交的缓存区修改时,直接使用git rm 文件会报错。此时执行此命令可强制将文件从缓存区和版本库中删除。 -
git rm --cached 文件:把文件从版本库中删除,但让文件保留在工作区且不被Git继续跟踪。通常适用于rm文件之后把其添加到.gitignore中。 -
撤回工作区文件的修改
git checkout 文件:丢弃工作区的修改,丢弃所有(git checkout .)。此文件必须是Git跟踪的。【说明】:丢弃工作区的修改(git add .之前的信息修改)
-
缓存区 -> 工作区
git reset HEAD 文件:丢弃缓存区的修改,回退到工作区。【说明】:将文件回退到 执行 git add .命令之前的状态。
-
本地仓库 -> 缓存区
git reset --soft head^:丢弃本地仓库的修改,回退到缓存区。【说明】:
-
当执行 git add . 、 git commit -m '',会把当前文件提交到本地仓库,然后执行 git reset --soft head^ ,会将本次提交在本地仓库的提交记录(git log --oneline)删除并回退到缓存区状态(git status)。head^ == HEAD~1 本地仓库(HEAD -> master)指针回退到上一个版本
-
如果此时 HEAD -> master, origin/master 指向同一个版本,然后执行 git reset --soft head^。
此时的结果会使得 本地仓库的代码版本低于远程仓库的代码版本。
这个错误就是开发中常遇到的错误,可以通过 git pull 拉取远程分支代码。
-
-
回退上一次commit状态
git reset --hard head^:重置所有文件到上次commit的状态。【说明】:执行回滚操作,本地仓库的版本会指向上一次提交的版本号。
但此时远程仓库和本地仓库的指针会指向不同的版本,会再次出现报错提示:
可以执行
git push --force origin master强制提交: -
git reset --hard HEAD~1:将当前分支重置为倒数第2个版本。【说明】:
-
重置到指定版本
git reset --hard 提交版本号:将当前分支重置为指定版本。 -
详细日志信息
git log:显示从最近到最远的提交日志。包含每个提交的SHA1校验和、作者的名字和邮箱、提交时间以及提交说明等。 -
简要日志信息
git log --oneline:git log的简要版【说明】:
-
git log --decorate:不仅输出git log的信息,还带标签等额外信息。 -
git log --graph不仅输出git log的信息,还可查看当前分支什么时候出现了分支、合并。 -
git log 分支名:查看指定分支的提交日志。 -
git log 要查看的分支名branchA ^要忽略的分支名branchB:查看branchA的日志信息(排除branchB的信息) -
查看所有分支操作日志
git reflog: 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。 -
git tag:查看所有标签。注意:标签不是按时间列出,而是按字母排序。 -
git show <tag-name>:查看指定标签的信息。 -
git tag <tag-name> <commit-id>:在指定版本号上打上标签。 -
git checkout <tag-name>:切换到指定标签。 -
git push --tags:将标签推送给远程仓库。 -
git remote add <shortname> <url>:添加并关联一个远程库。shortname一般为origin。 -
提交到远程
git push <remote-repo-shortname> <local-branch>:将本地分支推送到远程仓库。 -
拉取分支代码
git pull <remote-shortname> <local-branch>:拉取远程仓库最新提交,并合并到指定的本地分支上。 -
git fetch:拉取远程仓库最新提交,但不会自动合并分支。 -
查看本地分支
git branch:列出本地分支列表。当前分支前会标有*号。 -
查看远程分支
git branch -r:列出远程分支列表。 -
查看所有分支
git branch -a:列出所有分支列表。 -
创建分支
git branch 分支:创建新分支。 -
删除本地分支
git branch -d 分支:删除指定分支。 -
查看本地分支和最近的提交信息
git branch -v -a:查看所有分支的最后一次提交。【说明】:
-
查看所有分支和最新提交信息
git branch -v -a:查看所有分支的最后一次提交。【说明】:
-
切换分支
git checkout 分支:切换到指定分支。 -
创建本地分支并切换
git checkout -b 分支:创建并切换到指定分支。【说明】:
1. 当在 master 修改代码之后,直接执行 git checkout -b dev, 会将master的代码带到 dev 分支, 可以将 dev分支的代码(master 分支修改的代码)提交到远程dev仓库, 然后 git checkout master 后master修改的代码会被删除。 2. 如果在 master 修改代码之后, 直接或在master分支执行了git add .后,执行 git checkout dev(dev 已经存在,切换到dev) 此时无法切换需要先提交 master 的修改或 `stash` master的修改。 解决:1、如果包含新建的文件先进行 git 追踪:git add . 2、stash 修改:git stash save '缓存' () 3、切换到 dev :git checkout dev 4、取出stash:git stash pop 5、提交 3. 如果在 master 修改代码之后, 并且在master分支执行了git add .,git commit -m ''后,发现开发分支错误(需要在dev分支开发), 执行 git checkout dev(dev 已经存在,切换到dev),可以成功切换,但是master的代码不能带到dev分支。 解决:1、回退到暂存区: git reset --soft head^ 2、stash 修改:git stash save '缓存' 3、切换到 dev :git checkout dev 4、取出stash:git stash pop 5、提交 -
创建本地分支并拉取远程分支
git checkout -b [本地分支名] origin/[远程分支名]:拉取远程分支代码到本地分支,可直接提交到对应的远程分支。 -
常用git stash命令:
(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{num} :丢弃stash@{num}存储,从列表中删除这个存储
(8)
git stash clear :删除所有缓存的stash -
合并分支
git merge [目标分支] [带合并分支]:将指定分支合并到当前分支上。 可用git status -s查看冲突文件,状态标识为UU。 -
git config --list:列出所有配置信息。 -
git config <key>:检查关键字key的配置。如git config user.name,查看姓名配置。 -
git config --global alias.命令别名 命令:为指定命令配置一个别名,可快速输入命令。 -
git config --global alias.unadd 'reset HEAD':使用git unadd 文件可丢弃指定文件在缓存区的修改。 -
git config --global alias.st status:使用git st代替git status。 -
git config --global alias.co checkout:使用git co代替git checkout。 -
git config --global alias.cm commit:使用git cm代替git commit。 -
git config --global alias.br branch:使用git br代替git branch。 -
git lg:输出高逼格的日志 -
git last:查看最近一条日志
gitignore
配置语法:
- 以斜杠“/”开头表示目录;
- 以星号“*”通配多个字符;
- 以问号“?”通配单个字符
- 以方括号“[]”包含单个字符的匹配列表;
- 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;