哈哈,有点标题党,人还是要谦虚一点。这里为了方便查字典,整理了常用的git操作,正常开发工作情况下应该很全了,如果随后遇到新的奇淫操作会不断更新的~

生成ssh key
1
2
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t rsa -C "joacycode@163.com
用户名、邮箱配置
1
2
git config user.name yourname --local
git config user.email yourname@emmail.com --local
本地项目关联远程仓库
1
2
3
4
5
6
7
8
9
10
11
12
13
/*切换到本地项目地址,初始化项目。该步骤会创建一个.git文件夹是附属于该仓库的工作树*/
git init
git add .
git commit -m 'initial commit'

/*Git上已有仓库,不克隆的情况下关联到本地仓库,本地仓库下运行此命令,可能需要执行git config --global push.default matching命令,使得push命令默认push到github的同名仓库中*/
git remote add origin git@service:path/xx.git

/*把本地项目push到远程github仓库*/
push -u origin master

/*Git远程分支和本地分支的关联未创建*/
git branch --set-upstream branchName origin/branchName
克隆代码库
1
git clone git@[git address]:[gitname]  [local repo-name]
创建分支
1
2
3
4
git branch [bname] 	/*基于本地创建分支*/
git push origin [bname] /*推送本地分支*/
git branch [bname] origin/bname /*基于远程创建分支*/
git checkout -b [bname] [origin/bname] /*创建分支并切换到此分支(远程)*/
查看分支
1
2
3
4
git branch		/*列出本地所有分支*/
git branch -r /*列出远程所有分支*/
git branch -a /*列出所有分支(远程和本地)*/
git branch -avv /*列出所有分支(并显示追踪track关系)*
删除分支
1
2
git branch -d[-D] [bname] 删除本地分支
git push origin --delete [bname]删除远程分
切换分支
1
git checkout [bname]
更新分支
1
2
3
4
5
#更新分支内容
git pull origin [branch name]

#拉取远程最新列表分支
git fetch origin
合并分支

切换到需要合并的分支

1
git checkout [bname]

禁用fast-forward的合并

1
git merge --no-ff  -m ”description” [mergebranch]

解决目录下的冲突

解决冲突(手动解决 外部工具解决beyondCompare)
重新构建所有冲突的文件

1
2
3
4
5
6
7
8
# 解决本次合并的所有冲突
git mergetool

# 解决特定文件的冲突
git mergetool src/js/g.js

#查看编辑gitconfig [mergetool difftool alias]
vim ~/.gitconfig

本地分支与远程分支绑定
1
2
git  push  -u  origin  [bname]  /*第一次推送*/
git push 或者 git push origin [bname] /*绑定后的推送*/
更新master
1
git pull --rebase origin master
恢复代码

1.提交到版本库 但未推送至远程(git commit后)

1
2
3
4
git reset - -hard origin/[bname]	/*放弃本地修改和远程保持一致*/
git reset - -hard [commit id] /*恢复到指定版本*/
git reset - -hard[HEAD[HEAD^ HEAD^^ HEAD~N]
git reset - -hard file[文件地址]

2.已添加到暂存区 (git add后)

1
2
git reset HEAD file[文件地址] 	/*从版本库恢复内容到暂存区*/
git checkout - -file[文件地址] /*从暂存区恢复到工作区,丢掉工作区*/

3.直接丢弃工作区 (还未 git add)

1
git checkout - -file

恢复一个提交
1
git  revert [commit id]
恢复merge
1
git revert -m 1 [merge commit id]
对比文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 对比两个分支文件
git diff dev master -- [path]

# 对比两个分支文件
git diff dev:[path] master:[path]

# 对比提交过的文件
git diff [commit id 1] [commit id 2]

# 对比工作区和暂存区
git diff -- [PATH]

# 对比工作区和版本库
git diff HEAD -- [path]

# 对比暂存区和版本库
git diff --cached -- [PATH]

# 比较本次合并的所有修改(只与提交前的记录比较)
git difftool
add操作
1
2
3
4
5
6
# 保存所有操作
git add -A
# 保存删除和修改 但不包括新建
git add -u
# 保存新建和修改 但不包括删除
git add .
查看当前分支commit id
1
git rev-parse HEAD
Git远程版本回滚
1
2
3
4
/*本地代码回滚到上一版本(或者指定版本)*/ 
git reset --hard [commit id]
/*加入-f参数,强制提交,远程端将强制更新到reset版本*/
git push -f origin branchname
gitconfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
~/.gitconfig
[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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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

欢迎交流转载请注明出处