Git使用手册(持续更新)


前言

Git是日常工作中常用的代码管理工具。熟悉git非常必要,能够提升开发集成版本的效率。

Git仓库有四个部分:工作区、暂存区、本地仓库(commit历史)、远程仓库

工作区: 用户当前编辑的内容 是在工作区,通过 git add 将工作区内容提交到 暂存区;
暂存区: git add 之后的修改保存在 暂存区,暂存区内容 通过 git commit 提交到 本地仓库;
本地仓库: git commit 后的内容存储在本地仓库,在这里可以通过 git log 查看 commit 历史记录,本地仓库内容 通过 git push 提交到远程仓库
远程仓库: git push将本地仓库的修改,推送到远程仓库


1. git入门操作

1.1 环境配置

git config --global user.name "用户名"
git config --global user.email "用户邮箱"

//去除ssl校验,从而使用https协议
git config --global http.sslVerify false  
  
//本地保存账号密码,避免每次https下载都需要输入账号密码
git config --global credential.helper store  

//不使用自动回车符转换
git config --global core.autocrlf false 

//linux下设置日志模板
git config --global commit.template ~/git/commit_message.txt  

每次登录时,Bash 的初始化文件 /etc/bashrc(针对所有用户)或 ~/etc/.bashrc(针对当前用户)会自动执行。因此,只需添加下列常用命令到bashrc文件即可。

git config --global http.sslverify false
git config --global credential.helper store
git config --global core.autocrlf false
git config --global core.filemode false
git config --global commit.template ~/git/commit_message.txt
alias gitpull="git pull && git submodule update --init"
alias gitclone="git clone -–recursive"

或者
修改~/.gitconfig文件如下:

[core]
editor = vim
filemode = false
[user]
name = 自己名字
email = 自己邮箱
[color]
ui = true
[alias]
st = status
br = branch
co = checkout
dt = difftool
[commit]
template = ~/.gitmessage
[diff]
tool = vimdiff

1.2 下载代码

git clone --recursive \<url>  #下载仓库及**所有子模块**

1.3 提交代码

git status 
git add .
git commit -m "xxxxx" #或git commit后在vi编辑。
git push -u origin master

1.4 分支操作

git checkout -b branch_name   #创建并且新分支
git branch -a #查看所有分支

1.5 删除分支

删除本地分支:

git branch -d localBranchName

删除远程分支:

git push origin --delete remoteBranchName

1.6 显示日志

git log #显示提交记录
git log -p  #显示提交及具体修改记录

1.7 git stash

git stash #将本地修改提交到暂存区
git stash save tip1 #将本地修改提交到暂存区并取名tip1
git stash list #列举暂存列表
git stash drop tip1 #删除某条暂存
git stash clear #清空所有暂存

2. git子模块操作

2.1 设置子模块头文件

git submodule add \<url> \<path>  
git add path
git commit
git push origin xxx 

2.2 下载子模块

git submodule update --init –recursive

2.3 更新子模块

cd submodule_directory
git checkout v1.0
git reset \<hash> --hard
cd ..
git add submodule_directory
git commit -m "update submodule."
git push origin xxx

3. git常见问题

3.1 如何撤销git add或者git commit?

a.	已经commit -m " "了,代码进入了本地仓库,需要撤回:
git reset --soft HEAD^

注:HEAD^的意思是上一个版本,也可以写成HEAD~1 ;如果你进行了2次commit,想都撤回,可以使用HEAD~2

b.	已经git add. 了,想撤回:
git reset HEAD
c.	将暂存区的指定文件,恢复到工作区 (本地修改内容会被 暂存区内容替换)
git checkout [file] 
d.	删除工作空间改动代码,撤销commit和add
 git reset --hard  //重置暂存区与工作区,与上一次commit保持一致

3.2 windows和linux混用情况

Git对文件访问权限的管理与配置选项core.filemode有关。选项默认为true,即区分文件的执行权限,校验Git的Index中和工作目录中的文件权限。
一般情况下,我们只关心代码的更改,而不在乎文件权限的修改。所以需要修改一下Git中的 filemode 配置选项。

linux全局设置加 --global 选项:git config --global core.filemode false
或者通过windows TortoiseGit配置:core.fileMode

3.3 两个不同的分支merge出现冲突?

假设现在有master和bran1分支,都有一个readme.txt文件,内容如下:
master:

master: head
this is a readme file.
master: foot

bran1分支:

bran1: head
this is a readme file.
bran1: foot

先git checkout master,然后执行git merge bran1发现存在冲突。此时打开 readme 文件,发现文件内容入下:

<<<<<<< HEAD
master: head
=======
bran1: head
>>>>>>> bran1
this is a readme file.
<<<<<<< HEAD
master: foot
=======
bran1: foot
>>>>>>> bran1

这里的 <<<<<<< ,=======,>>>>>>> 标记了冲突出现的位置。我们有两种处理:解决冲突强制覆盖

  • 解决冲突:

可以对冲突对文本进行选择,比如第一个冲突我们保留 master 下对修改,第二个冲突保留 bran1 下对修改:

master: head
this is a readme file.
bran1: foot

再次进行提交即可。

  • 强制覆盖:

a. 通过git merge实现
git merge有一个参数strategy,用来指定合并的策略,参数中除了默认的,还有ours和theirs,顾名思义,ours就是以当前我的分支为主,theirs就是以对方的分支为主。

具体操作可以是切换到Old分之上,然后通过

git checkout Old
git merge --strategy=theirs New
或 git merge -f New

b. 通过git reset实现

git checkout Old
git reset --hard New
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值