快速上手Git操作

Git配置

Git配置查看
git config --list

or

git config user.name
git config user.email 
Git账户设置
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Git颜色显示

git config --global color.ui true

Git忽略文件设置

新建一个.gitignore文件

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa
  • 有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了。git add -f App.class可以强制添加
  • 查看哪个规则拦截了,git check-ignore -v App.class

配置别名

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

配置文件

配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = [email protected]:michaelliao/learngit.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

$ cat .gitconfig
[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = Your Name
    email = [email protected]

版本库创建

在想创建仓库的文件目录下执行如下命令:

git init

ps:可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见

添加文件到暂存区

git add readme.txt
git add file1.txt file2.txt
  • 使用git status 命令可以查看暂存区的内容存储情况
  • 不管是新增文件还是修改仓库中的文件,commit之前都要add到暂存区

提交文件至本机master分支

git commit file1.txt -m "message"
git commit -m "message"

ps:commit 只会提交暂存区的文件到本机master分支

查看仓库状态

git status

ps:仓库当前的状态,可以看到哪些文件被修改了,哪些文件没被add,哪些文件被add了

查看文件的修改内容

git diff filename.txt

查看最近的提交记录

git log
git log --pretty=oneline

此命令只适用于查看当前窗口最近的命令,如果窗口重新打开后,想查看所有的命令历史,使用git reflog

版本回退

git reset --hard HEAD^
git reset --hard HEAD~100
git reset --hard 1094a
  • 在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  • 1094a是版本号,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

丢弃工作区的修改

git checkout -- filename.txt
  • 如果文件自修改后还没被存放到暂存取,撤销修改就会和版本库里一模一样。
  • 如果文件已添加到暂存区,又作了修改,撤销修改就会回到添加暂存区后的状态。
  • 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,第二步用命令git checkout

删除文件

git rm filename.txt
git commit -m "remove test.txt"

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

添加远程仓库

  1. 生成SSH key,在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:ssh-keygen -t rsa -C "[email protected]"
  2. 登陆GitHub,打开“Account settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
  3. 在本地的仓库下运行命令:git remote add origin [email protected]:michaelliao/learngit.git

[email protected]:michaelliao/learngit.git为远程仓库地址

本地库内容推送到远程仓库

git push -u origin master

每次本地提交后,只要有必要,就可以使用命令
git push origin master推送最新修改

从远程库克隆

git clone [email protected]:michaelliao/gitskills.git

Git分支

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

Fast forward模式合并某分支到当前分支:git merge

强制禁用Fast forward模式合并某分支到当前分支:git merge --no-ff -m

删除分支:git branch -d

Git解决冲突

  1. git status查看冲突的文件
  2. 直接查看和修改有冲突的文件
  3. git add filename.txt
  4. git commit -m "conflict fixed"

git log --graph --pretty=oneline --abbrev-commit 可以看到分支的合并情况

Bug分支

  1. git stash 保存当前dev工作区的数据
  2. 创建bug 分支
  3. 修改并合并bug 分支
  4. 切换到dev分支
  5. git stash list 查看stash内容
  6. git stash pop 恢复保存的数据,恢复的同时把stash内容也删了
  7. 或者使用 git stash apply stash@{0}git stash drop stash@{0}恢复保存的数据

Feature分支

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

多人协作

查看远程库的信息: git remote

显示更详细的信息: git remote -v

$ git remote -v
origin  [email protected]:michaelliao/learngit.git (fetch)
origin  [email protected]:michaelliao/learngit.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

推送分支: git push origin

  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

更新分支: git pull

  • git pull 如果提示There is no tracking information for the current branch. 可以使用git branch --set-upstream-to origin/
  • git pull 如果提示fatal: refusing to merge unrelated histories
    可以使用git pull --allow-unrelated-histories解决
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致

Rebase

rebase操作可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签

  • 打标签:git tag 或者 git tag
  • 创建带有说明的标签:git tag -a -m "version 0.1 released"
  • 查看标签:git tag
  • 查看标签信息:git show
  • 删除标签:git tag -d
  • 推送某个标签到远程:git push origin
  • 一次性推送全部尚未推送到远程的本地标签:git push origin --tags
  • 删除远程标签: 1.git tag -d 2.git push origin :refs/tags/

标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

常用命令

常用命令.png

此文感谢廖雪峰老师的git教程

你可能感兴趣的:(快速上手Git操作)