" 设置用户...">
美文网首页
git命令笔记

git命令笔记

作者: TinkTan | 来源:发表于2020-08-17 17:46 被阅读0次

    1. 安装Git

    git config --global user.name "<用户名>" 设置用户名
    git config --global user.email "<邮件地址>" 设置Email

    2. 创建版本库

    • git init 初始化git仓库,把当前所在目录变成git可管理的仓库

    • git add <文件名> 把指定的文件添加到仓库,可反复多次使用,添加多个文件。如果要添加目录下所有文件,使用git add . 。提交修改和提交新文件都使用git add。

    • git commit -m "<提交说明>" 提交文件到仓库。-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    3. 时光穿梭机

    git status 查看仓库当前的状态

    git diff <文件名> 查看指定文件的修改内容

    3.1 版本回退

    git log 查看从当前版本到最远版本的提交日志,如果回退了版本,回退版本后面的版本提交的日志就看不到了。

    git reset --hard HEAD^ 本地代码回退到上一个版本

    git reset --hard HEAD~100 本地代码回退到往上第100个版本

    git reset --hard [commit_id] 本地代码回退到指定版本,commit id是需要回退到版本的提交标识id。版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

    git reflog 查看命令历史。包含每条命令的commit_id、提交命令、提交说明

    3.2 撤销修改

    git checkout -- <file> 把file文件在工作区的修改全部撤销,有两种情况:

    一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    没有--,就变成了“切换到另一个分支”的命令。

    git reset HEAD <file> 把暂存区的file文件修改撤销掉(unstage),重新放回工作区。还要再执行git checkout -- <file> 把工作区的修改撤销才撤销修改。

    3.3 删除文件

    git rm <file> 删除file文件然后提交到暂存区。相当于手动删除file文件然后git add <file>操作,效果一样。

    4. 远程仓库

    • git remote add <远程库别名> <远程库地址> 本地仓库关联远程库。适用先有本地库,后有远程库时。

    • git push -u <远程库别名> <需要推送的本地分支名> 第一次推送本地分支的所有内容到远程仓库中,加上-u参数,git不到把内容推送到远程仓库,还把本地分支和远程分支关联起来,以后的推送或拉取就可以简化命令。使用去掉-u的命令推送。

    • git push <远程库别名> <需要推送的本地分支名> 推送本地分支的最新修改到远程仓库中

    • git clone <远程库地址> 克隆远程库到本地

    5. 分支管理

    5.1 创建与合并分支

    • git branch 查看所有分支,当前分支前面会标一个符号"*"
    • git branch <分支别名> 创建分支
    • git checkout <分支别名> 切换到已有分支
    • git checkout -b <分支别名> 创建+切换分支
    • git switch <分支别名> 切换到已有分支(git新版本新增)
    • git switch -c <分支别名> 创建+切换分支命令(git新版本新增)
    • git merge <分支别名> 合并某分支到当前分支(fast forward模式合并)
    • git branch -d <分支别名> 删除分支

    5.2 解决冲突

    • git status 查看仓库当前状态

    • git log 查看commit历史记录,按回车可以往下查看,按Q退出查看

    • git log --graph 查看分支合并图

    5.3 分支管理策略

    git merger --no-ff -m "commit说明" <分支别名> 禁用Fast forward进行合并分支

    两种模式合并分支的区别:

    • 不加--no--ff参数时,fast forward模式下合并,删除分支后,会丢掉分支信息,看不出来曾经做过合并。
    • 加上--no-ff参数时,禁用fast forward模式下合并,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,能看出来曾经做过合并。

    5.4 Bug分支

    每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

    • git stash 储藏工作现场,可以储藏多次
    • git stash list 查看工作现场列表
    • git stash apply 恢复工作现场,但工作现场内容并不删除
    • git stash apply <工作现场别名> 当有多次stash时,恢复指定的工作现场(git stash list命令可以查看工作现场别名)
    • git stash drop 删除工作现场
    • git stash pop 恢复工作现场并删除
    • git cherry-pick <commit_id> 把其他分支上的提交修改“复制”到当前分支,commit_id为需要复制的提交的id。

    5.5 Feature分支

    开发一个新功能,最好新建一个feature分支。在feature分支上面开发,完成后,合并,最后,删除该feature分支。
    git branch -D <分支别名> 强行删除分支。(要丢弃一个没有被合并过的分支时,无法使用git branch -d命令删除分支。)

    5.6 多人协作

    • git remote 查看所有远程库信息

    • git remote -v 显示详细的所有远程库信息。 上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

    • git push <远程库别名> <需要推送的本地分支名> 推送本地分支的最新修改到远程仓库中

    并不是一定要把本地分支都往远程推送,那么,哪些分支需要推送,哪些不需要呢?

    • master分支是主分支,因此要时刻与远程同步;

    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    • 总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

    • git checkout -b <本地分支别名> origin/<远程分支别名> 在本地创建和远程分支对应的分支
    • git branch --set-upstream-to <本地库分支别名> origin/<远程库分支别名> 建立本地分支和远程分支的关联。git pull时提示There is no tracking information for the current branch.说明没有关联。
    • git pull <远程库别名> <远程库分支别名> 从远程抓取最新的提交

    5.7 Rebase

    • git rebase 把本地未push的分叉提交历史整理成直线,

    6. 标签管理

    6.1 创建标签

    • git tag 查看所有标签
    • git tag <tagname> 在当前分支打一个新标签,默认标签是打在最新提交的commit(HEAD)上的。tagname是命名的标签名称。
    • git tag <tagname> <commit_id> 在指定提交上打一个新标签。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
    • git tag -a <tagname> -m <标签说明> <commit_id> 在指定提交上打一个新标签,并加上标签说明文字。tagname是命名的标签名称,commit_id可选,不指定commit_id时标签默认打在最新提交的commit(HEAD)上。
    • git show <tagname> 查看标签信息

    6.2 操作标签

    • git push origin <tagname> 推送一个本地标签

    • git push origin --tags 推送全部未推送过的本地标签

    • git tag -d <tagname> 删除一个本地标签

      删除远程标签

      [1] git tag -d <tagname> 先删除本地标签

      [2] git push origin :refs/tags/<tagname> 推送删除标签

    7. 自定义Git

    7.1 忽略特殊文件

    • git add -f <fileName> 强制添加文件到git(被忽略的文件也可以添加,不加-f无法添加被忽略的文件)
    • git check-ignore -v <fileName> 查看文件被忽略的是因为哪条规则。Git会告诉我们,.gitignore的第几行规则忽略了该文件。

    7.2 配置别名

    • git config --global alias.<别名> 原始命令 被原始命令起别名,相当于简写。使用别名和原始命令效果一样。当原始命令中有多个单词,包含空格时,应该使用单引号''把原始命令包起来,如果不加单引号将使用别名后的第一个单词作为原始命令。

    示例:

    $ git config --global alias.co checkout
    $ git config --global alias.ci commit
    $ git config --global alias.br branch
    $ git config --global alias.st status
    $ git config --global alias.unstage 'reset HEAD'
    $ git config --global alias.last 'log -1'
    

    --global参数

    --global参数是全局参数,是针对当前用户起作用的,也就是这些命令在这台电脑的所有Git仓库下都有用。如果不加,那只针对当前的仓库起作用。

    配置文件位置

    • 每个仓库的Git配置文件都放在.git/config文件
    • 用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig

    配置文件内容

    [alias] 别名

    [user] 用户相关配置

    相关文章

      网友评论

          本文标题:git命令笔记

          本文链接:https://www.haomeiwen.com/subject/hkgqjktx.html