赞
踩
Git是日常工作中常用的代码管理工具。熟悉git非常必要,能够提升开发集成版本的效率。
Git仓库有四个部分:工作区、暂存区、本地仓库(commit历史)、远程仓库
工作区: 用户当前编辑的内容 是在工作区,通过 git add 将工作区内容提交到 暂存区;
暂存区: git add 之后的修改保存在 暂存区,暂存区内容 通过 git commit 提交到 本地仓库;
本地仓库: git commit 后的内容存储在本地仓库,在这里可以通过 git log 查看 commit 历史记录,本地仓库内容 通过 git push 提交到远程仓库
远程仓库: git push将本地仓库的修改,推送到远程仓库
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
git clone --recursive \<url> #下载仓库及**所有子模块**
git status
git add .
git commit -m "xxxxx" #或git commit后在vi编辑。
git push -u origin master
git checkout -b branch_name #创建并且新分支
git branch -a #查看所有分支
删除本地分支:
git branch -d localBranchName
删除远程分支:
git push origin --delete remoteBranchName
git log #显示提交记录
git log -p #显示提交及具体修改记录
git stash #将本地修改提交到暂存区
git stash save tip1 #将本地修改提交到暂存区并取名tip1
git stash list #列举暂存列表
git stash drop tip1 #删除某条暂存
git stash clear #清空所有暂存
git submodule add \<url> \<path>
git add path
git commit
git push origin xxx
git submodule update --init –recursive
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
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保持一致
Git对文件访问权限的管理与配置选项core.filemode有关。选项默认为true,即区分文件的执行权限,校验Git的Index中和工作目录中的文件权限。
一般情况下,我们只关心代码的更改,而不在乎文件权限的修改。所以需要修改一下Git中的 filemode 配置选项。
linux全局设置加 --global 选项:git config --global core.filemode false
或者通过windows TortoiseGit配置:core.fileMode
假设现在有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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。