Git Product home page Git Product logo

git-tips's Introduction

Git tips 🚀

1. Git配置

Git 配置

Git 提供一个git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了Git在各个环节的具体工作方式和行为。这些变量可以存放在一下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户普遍适用的配置。使用git config --system <verb> 更改系统git配置
  • ~/.gitconfig 文件: 用户目录下的配置文件只适用于该用户。使用git config --global <verb>更改当前用户下git配置
  • 当前项目的Git目录中的配置文件(即工作目录中.git/config文件):只对当前项目有效。每一个级别的配置会覆盖上层的相同配置。所以 .git/config 里的配置文件会覆盖/ect/config 中的同名变量

用户信息

配置个人用户名和邮箱

git config --global user.name "username"
git config --global user.email "[email protected]"

查看配置文件

vim ~/.gitconfig

文本编辑器

配置文本编辑器

git config --global core.editor vim

查看配置信息

检查已有配置信息

git config --list

其中重复变量名代表它们来自不同的配置文件,不过Git实际采用的是最后一个 这些配置可以再~/.gitconfig /etc/gifconfig 看到

vim ~/.gitconfig

也可以直接查阅某个环境变量设定,例如:

git config user.name

2. 将本地非空目录转化为Git仓库

  1. 将本地项目文件初始化为git版本库
git init
  1. 将本地项目文件添加到版本库
git add .
  1. 拍摄项目快照。-m 标志让Git将接下来的信息 message 记录到项目的历史记录中
git commit -m 'message'
  1. 在github中新建一同名仓库
  2. 给本地版本库设置远程仓库
git remote add origin <url>
  1. 查看结果(可选)
git remote -v
  1. 将本地版本库推送到git上
git push origin master
  1. 删除远端文件
git rm -r -n --cached <filename>  # -n 不会删除任何文件,仅展示此命令要删除的文件列表
git rm -r --cached <filename>     # 将文件从远端删除
git commit -m 'delete filename' 
git push origin master

3. 版本回退

git reset 命令主要有三个选项:git reset --soft; git reset --mixed; git rest --hard

git reset 产生影响

选项 HEAD 索引 工作目录
--soft
--mixed
--hard

回退到之前的版本

git reset --hard <commit_id>
git reset --hard HEAD^

HEAD^ 是回退到前一个版本,HEAD^^回退到前两个版本,以此类推

查看所有操作记录( 包括所有 commit 和 reset )

git reflog

4. 忽略文件

将无需纳入Git管理的文件添加到创建的.gitignore的忽略文件中,列出要忽略文件的模式。

文件.gitignore的格式规范如下:

  • 所有空行或者以#开头的行都会被Git忽略;
  • 可以使用标准的glob模式匹配,它会地柜地应用到整个工作区中;
  • 匹配模式可以以 (/) 开头防止递归;
  • 匹配模式可以以 (/)结尾指定目录;
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

所谓的glob模式是指shell所使用的简化了的正则表达式。星号 (*) 匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符;问号 (?)只匹配一个任意字符;如果方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有0-9的数据)。使用两个星号(**)表示匹配任意中间目录。

5. 分支管理

使用分支意味着你可以从开发主线上分离开来,在不影响主线的同时继续工作。Git 分支,其本质仅仅是指向提交对象的可变指针。

创建dev分支

git branch dev

创建分支实际上只是为你创建了一个可以移动的新的指针。

克隆指定分支

git clone -b <branch_name> <url>

切换到 dev 分支

git checkout dev

在git 2.23版本之后可以使用switch命令进行分支切换

git switch master

或者git checkout 命令加上 -b参数表示创建并切换

git checkout -b dev

或者

git switch -c dev

查看当前分支

git branch

在当前分支操作并提交

dev 分支工作完成后,切换回master主分支

git checkout master

dev分支上内容合并到主分支master

git merge dev

合并分支时Git一般默认会用Fast forward 模式,但是此模式下,删除分支后,会丢掉分支信息。因此,可以选择禁用Fast forward 模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m 'merge with no-ff' dev

git merge 命令用于合并指定分支到当前分支

删除分支

git branch -d dev

查看分支合并图

git log --graph

复制特定提交到当前分支

git cherry-pick [commit_id]

强行删除没有合并过的分支

git branch -D <branch_name>

从远程抓取分支

git pull

在本地创建和远程对应的分支,本地和远程分支名称最好一致

git checkout -b branch_name origin/branch_name

关联本地分支和远程分支

git branch --set-upstrem branch_name origin/branch_name
Bug 分支(使用git stash命令保存和恢复进度)

我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半有人过来反馈一个bug,让马上解决,但是新功能做到一半又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop 来恢复之前的进度继续开发新功能。

  • 保存当前进度

    git stash 
    git stash save 'message' # 添加注释
    
  • 显示保存进度列表

    git stash list
    
  • 恢复最新进度到工作区

    git stash apply [stash_id] 
    git stash pop [stash_id]  # 通过此命令恢复后,会删除当前进度
    
  • 删除一个存储的进度

    git stash drop [stash_id]
    git stash clear  # 删除所有存储的进度
    

6. 标签管理

创建标签

git tag <tag_name>

查看所有标签

git tag

NOTE:默认标签是打在最新提交的commit的上的

查看标签信息

git show <tag_name>

指定标签信息

git tag -a <tag_name> -m 'message'

推送标签

推送本地标签

git push origin <tag_name>

推送全部未推送过的标签

git push origin --tags

删除标签

删除本地标签

git tag -d <tag_name>

删除远程标签

git push origin :refs/tags/<tag_name>

7. SSH配置及使用

检查是否存在ssh key

cd ~/.ssh

查看是否存在 id_rsaid_rsa.pub 两个文件

生成密钥

ssh-keygen -t rsa -C "[email protected]"

连续三个回车之后,可以得到 id_rsaid_rsa.pub两个文件

登录github,添加ssh

id_rsa.pub文件中的内容添加到settings -> SSH and GPG keys -> New SSH key

测试

你将会看到:

Hi username! You've successfully authenticated, but Github does not provide shell access.

说明SSH配置成功!

8. 常见问题解决方案

  • 在git pull时出现如下报错:
    error: You have not concluded your merge (MERGE_HEAD exists).
    hint: Please, commit your changes before merge.
    fatal: Existing because of unfished merge.
    

解决方案:

  1. 先commit再pull或者merge
  2. 放弃本地修改,直接覆盖
git reset --hard
git pull

git-tips's People

Contributors

cybian avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.