下面所写的其实是写给公司内部的Git使用基础教程,我在这里也记录下。
修改Git配置
windows操作系统换行配置
-
git config --global core.autocrlf input
用户名、邮箱配置
-
git config user.name yourname --local
-
git config user.email yourname@tudou.com --local
克隆v3代码库
-
git clone git@gitlab.intra.tudou.com:static/v3.git
查看分支
列出本地所有的分支
-
git branch
列出远程所有的分支
-
git branch -r
创建分支
基于本地分支创建
-
git branch [BRANCH_NAME]
-
git push origin [BRANCH_NAME]
基于远程分支创建
-
git branch [BRANCH_NAME] origin/master
本地分支与远程分支绑定
绑定后操作就能省略
origin [branch],使用起来更加方便高效,当然如果有多个远程需要操作就不能省略了
-
git push -u origin [branch]
切换分支
切换到本地分支,如果本地分支不存在自动寻找远程分支
-
git checkout [BRANCH_NAME]
更新分支
更新master
-
git pull --rebase origin master
解决rebase冲突。
-
git status
# 根据提示打开对应文件,搜索"<<<<<<<"字符,解决冲突后执行
-
git add -u
-
git rebase --continue
# 停止pull操作,回pull rebase之前的状态
-
git rebase --abort
提交代码
提交到本地版本库
-
git commit -m "commit message"
提交到远程master
-
git push origin master
合并分支
切换到master。
-
git checkout master
合并分支。
-
git merge --no-ff [BRANCH_NAME]
解决src目录下的冲突。
-
https://help.github.com/articles/resolving-a-merge-conflict-from-the-command-line
使用外部工具解决冲突
解决本次合并的所有冲突
-
git mergetool
解决特定文件的冲突
git mergetool src/js/g.js
重新构建build、dist目录下的所有冲突的文件。
-
ytpm [PATH]
提交代码。
-
git add .
-
git commit -m "commit message"
恢复代码
放弃本地修改(废弃本地所有未提交的文件,和远程保持一致)
-
git reset --hard origin/master
恢复一个提交
-
git revert [COMMIT_ID]
恢复merge
-
git revert -m 1[MERGE_COMMIT_ID]
恢复到指定版本
-
git reset --hard [COMMIT_ID]
删除分支
删除本地分支
-
git branch -d [BRANCH_NAME]
删除远程分支
-
git push origin --delete[BRANCH_NAME]
查看变更记录
查看变更历史
-
git log --decorate --numstat [PATH]
查看某个提交记录
-
git show --name-only [COMMIT_ID]
对比文件
git默认方式
对比工作区版本和暂存区版本
-
git diff --[PATH]
对比暂存区版本和版本库版本
-
git diff --cached --[PATH]
对比工作区版本和版本库版本(HEAD)
-
git diff HEAD --[PATH]
对比两个提交过的文件
-
git diff [COMMIT_ID_1][COMMIT_ID_2]--[PATH]
对比两个分支的文件
-
git diff develop master -- src/js/g.js
-
git diff develop:src/js/g.js master:src/js/g.js
查看其它分支上的文件
-
git show master:src/js/g.js
外部比较工具完成比较
比较本次合并的所有修改(只与提交前的记录比较)
-
git difftool
比较指定文件的历史版本
-
git difftool [GitHash] HEAD -- src/js/g.js
不小心在develop上进行开发时解决方案
未提交时
-
git stash
-
git checkout [BRANCH_NAME]
-
git stash pop
已提交时
-
git log -1# 记住COMMIT ID
-
git reset --hard origin/develop
-
git checkout [BRANCH_NAME]
-
git cherry-pick [COMMIT_ID]
不小心将develop或基于develop创建的分支合并到master上时解决方案
-
A--M---B <---develop
-
\
-
--C--G---J---P---Q <---master
如上例,需要先确认好J这次错误提交点以及其之前、之后提交点的hash值,并确保当前HEAD处于Q上,接着执行:
-
git rebase -i -p --onto P G
执行完后需要手工解决之后每次提交出现的冲突,手工比较解决掉冲突后执行:
git add . // 添加此次冲突修改
-
git rebase --continue
注意,上面的步骤可能会进行很多次,每次都是上面的方法;手工比较的方法可以参看[外部比较工具][1]的使用方式。
其它
Beyond Compare比较工具配置
在~/.gitconfig文件中加入以下配置,使用的比较工具为Beyond Compare,大家可以自行下载;如果是win用户对应的路径需要相应的修改。
另外,Mac版的 Beyond Compare 4 还需要进行设置让其支持通过命令行的方式调用:点击菜单 -> Install Commond Line Tools...然后输入系统登录密码即可。
[merge]
tool = bcomp
[mergetool]
prompt = false
keepBackup = false
[mergetool "bcomp"]
trustExitCode = true
cmd = "/usr/local/bin/bcomp" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
[diff]
tool = bcomp
[difftool]
prompt = false
[difftool "bcomp"]
trustExitCode = true
cmd = "/usr/local/bin/bcomp" "$LOCAL" "$REMOTE"
常用git Alias
-
[alias]
-
st = status --short--branch
-
pu = pull --rebase
-
ca = commit --amend
-
ci = commit -a -v
-
br = branch
-
bv = branch -vv
-
co = checkout
-
cb = checkout -b
-
df = diff
-
un = reset --hard HEAD
-
uh = reset --hard HEAD^
-
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]"--decorate --numstat
-
ld = log --pretty=format:"%C(yellow)%h\\ %C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]"--decorate --date=short--graph
-
ls = log --pretty=format:"%C(green)%h\\ %C(yellow)[%ad]%Cred%d\\ %Creset%s%Cblue\\ [%cn]"--decorate --date=relative
GitHub 教程系列文章:
Ubuntu下Git服务器的搭建与使用指南