关于git:git日常操作命令

50次阅读

共计 4896 个字符,预计需要花费 13 分钟才能阅读完成。

Git 罕用操作

配置操作

git config --list  # 查看 git 配置信息
git config user.name # 查看 git 用户名
git config user.email #查看邮箱配置
git config --global user.name "nameVal" # 全局配置用户名
git config --global user.email "eamil@qq.com" # 全局配置邮箱

基本操作

git init                      #初始化我的项目
git add 文件名                 #增加指定文件
git add .                     #增加所以文件
git commit -m "提交正文"       #增加一个版本
git log                       #查看历史版本(不蕴含回退局部的)git reflog                    #查看历史版本(具体,蕴含回退局部的版本)git reset --hard 提交的版本号   #回退到指定的历史版本
git push -f                     #回退版本后,近程也回退(强制推送)git check out                 #

git reset --soft
git reset head
git reset --mix

# gitlab 本人创立代码托管(基于 linux)

分支操作

– base

git clone -b 分支名 仓库地址
git branch  -a  // 查看线上分支
git branch   // 查看本地分支

– 本地创立一个新的分支并推送到近程仓库

  1. 创立本地分支
git checkout -b 新分支名

执行该指令后,会在本地创立一个新分支,该分支是从以后分支上检出的,所以所有文件内容都和以后分支截然不同,这是失常的。创立胜利后,将主动切换至新分支上。

推送本地分支到近程仓库

git push --set-upstream origin 分支名 

– 拉取分支到本地

  1. 当我想从近程仓库里拉取一条 本地不存在的分支 时:
# 本地不存在的分支
git checkout -b 本地分支名 origin/ 近程分支名

这个将会主动创立一个新的本地分支,并与指定的近程分支关联起来。

若胜利,将会在本地创立新分支 dev2, 并主动切到 dev2 上。

如果呈现提醒:

fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?

示意拉取不胜利。咱们须要先执行

git fetch

而后再执行

git checkout -b 本地分支名 origin/ 近程分支名
  1. 本地存在的分支
# 以后分支
git pull

# 本地其余分支(存在的)git pull 分支名

如果 git pull 不胜利,就应用 git pull origin 分支名 就好了)

删除近程分支

git branch -a #查看已有的本地及近程分支
git push origin --delete dev  #删除近程分支
git remote prune origin # 同步近程分支(删除本地分支)git remote show origin # 查看近程分支状况

git branch -d dev #删除本地分支

推送到近程

git remote add origin ....... # 增加 git 地址
git push origin dev  推送到线上 dev 分支
git pull origin dev  获取线上的 dev 分支

提交的代码晚于 github 行的代码,会有谬误提醒,叫你从新拉取代码
拉取代码会提醒你合并代码

git pull origin dev =  git fetch origin dev  
                    +  git merge origin/dev


git pull 的代码会有分叉(有遗记提交的代码的状况:比方在公司开的代码曾经 commit 然而忘提交,回家持续开发提交,第二天到都公司 pull 代码就会呈现分叉)上面的办法不会有分叉
git fetch origin dev
git rebase origin/dev   #rebase 放弃提交记录的整洁

stash

git stash save “save message” : 执行存储时,增加备注,不便查找,只有 git stash 也是能够的,但查找时不不便辨认。

git stash list:查看 stash 了哪些存储

git stash show:显示做了哪些改变,默认 show 第一个存储, 如果要显示其余存贮,前面加 stash@{$num},比方第二个 git stash show stash@{1}

git stash show -p : 显示第一个存储的改变,如果想显示其余存存储,命令:git stash show stash@{$num} -p,比方第二个:git stash show stash@{1} -p

git stash apply : 利用某个存储, 但不会把存储从存储列表中删除,默认应用第一个存储, 即 stash@{0},如果要应用其余个,git stash apply stash@{$num},比方第二个:git stash apply stash@{1}

git stash pop:命令复原之前缓存的工作目录,将缓存堆栈中的对应 stash 删除,并将对应批改利用到以后的工作目录下, 默认为第一个 stash, 即 stash@{0},如果要利用并删除其余 stash,命令:git stash pop stash@{$num},比方利用并删除第二个:git stash pop stash@{1}

git stash drop stash@{$num}:抛弃 stash@{$num}存储,从列表中删除这个存储

git stash clear :删除所有缓存的 stash

tag

列出标签

$ git tag
v1.0
v2.0

1.8.5 系列感兴趣,能够运行:

$ git tag -l "v1.8.5*"

创立标签

  • 附注标签

在 Git 中创立附注标签非常简略。最简略的形式是当你在运行 tag 命令时指定 -a 选项:

$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4
  • 轻量标签

另一种给提交打标签的形式是应用轻量标签。轻量标签实质上是将提交校验和存储到一个文件中——没有保留任何其余信息。创立轻量标签,不须要应用 -a-s-m 选项,只须要提供标签名字:

$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
  • 前期打标签

你也能够对过来的提交打标签。假如提交历史是这样的:

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

当初,假如在 v1.2 时你遗记给我的项目打标签,也就是在“updated rakefile”提交。你能够在之后补上标签。要在那个提交上打标签,你须要在命令的开端指定提交的校验和(或局部校验和):

$ git tag -a v1.2 9fceb02

能够看到你曾经在那次提交上打上标签了:

共享标签

默认状况下,git push 命令并不会传送标签到近程仓库服务器上。在创立完标签后你必须显式地推送标签到共享服务器上。这个过程就像共享近程分支一样——你能够运行 git push origin

$ git push origin v1.5

如果想要一次性推送很多标签,也能够应用带有 --tags 选项的 git push 命令。这将会把所有不在近程仓库服务器上的标签全副传送到那里。

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw

删除标签

要删除掉你本地仓库上的标签,能够应用命令 git tag -d 。例如,能够应用以下命令删除一个轻量标签:

$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)

留神上述命令并不会从任何近程仓库中移除这个标签,你必须用 git push :refs/tags/ 来更新你的近程仓库:

第一种变体是 git push :refs/tags/

$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
 - [deleted]         v1.4-lw

下面这种操作的含意是,将冒号后面的空值推送到近程标签名,从而高效地删除它。

第二种更直观的删除近程标签的形式是:

$ git push origin --delete <tagname>

检出标签

如果你想查看某个标签所指向的文件版本,能够应用 git checkout 命令,尽管这会使你的仓库处于“拆散头指针(detached HEAD)”的状态——这个状态有些不好的副作用:

$ git checkout 2.0.0
Note: checking out '2.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch>

HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final

$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image

在“拆散头指针”状态下,如果你做了某些更改而后提交它们,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希能力拜访。因而,如果你须要进行更改,比方你要修复旧版本中的谬误,那么通常须要创立一个新分支:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

如果在这之后又进行了一次提交,version2 分支就会因为这个改变向前挪动,此时它就会和 v2.0.0 标签略微有些不同,这时就要当心了。

其它

1. 批改提交的正文

git commit –amend

正文完
 0