文章目录
- 一、常用git命令
- 提交所有工作区文件,包括未被跟踪的文件
- 追加到上一次的提交
- 删除之前提交到远程仓库的文件
- 删除一个文件夹(有特殊字符的用"" 汉字可以用*代替)
- 撤销暂存区add的文件
- 删除追踪状态
- 清除工作区的所有改动
- 清除未跟踪的文件,-会列出被删除的文件 -包括文件夹
- 更新代码的时候,git pull后加上远程分支,避免pull出错
- 回退版本
- stash的使用
- 打patch方法
- git使用要点:
- 建立追踪关系,在现有分支与指定的远程分支之间
- 本地分支重命名
- 显示指定文件是什么人在什么时间修改过
- 显示暂存区和上一个commit的差异
- 显示工作区与当前分支最新commit之间的差异
- 显示两次提交之间的差异
- git log 控制显示的记录格式
- alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号''将原来的命令引起来,防止特殊字符导致错误
- 二、git配置(.gitconfig)
- 三、git 常见问题及解决方案
一、常用git命令
提交所有工作区文件,包括未被跟踪的文件
git add -A
1 git add -A 提交所有变化(是下面两个功能的合集(git add --all的缩写))
2 git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
3 git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
追加到上一次的提交
git commit --amend
删除之前提交到远程仓库的文件
git rm [filename]
删除一个文件夹(有特殊字符的用"" 汉字可以用*代替)
git rm -r “doc/Qualcomm/Milan-K&H_andorid_M*”
撤销暂存区add的文件
git reset HEAD :不加,则撤销所有暂存区的add文件
删除追踪状态
git rm --cache :删除的是追踪状态,而不是物理文件。有时不想删除本地的文件, 只是想让git不再track
清除工作区的所有改动
git checkout -f
清除未跟踪的文件,-会列出被删除的文件 -包括文件夹
git clean -ndf
更新代码的时候,git pull后加上远程分支,避免pull出错
git pull origin [remote branch]
回退版本
HEAD:本地仓库,这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交
Index:暂存区,index也被称为staging area,是指一整套即将被下一个提交的文件集合。他也是将成为HEAD的父亲的那个commit
Working Copy:工作区,working copy代表你正在工作的那个文件集
git reset --mixed [commit id]:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset --soft [commit id]:回退到某个版本,只回退了commit的信息(即回退到某个版本的暂存区)。如果还要提交,直接commit即可
git reset --hard [commit id] :彻底回退到某个版本,本地的源码也会变为上一个版本的内容,此命令 慎用!这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:git reflog命令了
git reset HEAD~1 :撤销本地仓库的最近一个提交,默认mixed方式,即只保留源码,回退到某个版本的工作区。
stash的使用
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash -a: 将工作区以及Untracked files都备份起来。
git stash pop: 从Git栈中读取最近一次保存的内容,栈中的stash被删除,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash apply []: 从Git栈中读取某一次保存的内容,栈中的stash不被删除。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash drop [] 删除某一个进度,默认删除最新进度
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
#So, to view the content of the most recent stash, run
git stash show -p
#To view the content of an arbitrary stash, run something like
git stash show -p stash@{1}
#git stash 添加注释
git stash save -u “msg”
打patch方法
git show [cmomit ID] > [filename].patch
git diff [file] > [filename].patch
#使用patch方法
git apply [filename].patch
git使用要点:
1、每次要解决问题之前(一定要新建分支),把master分支git pull --rebase到最新
2、git checkout -b bug_overflow local_branch 建一个新的分支(这时候的代码与master的一致),再在这个上面做修改
3、修改完之后直接 git push origin HEAD:refs/for/master 将提交区的修改Push到Gerrit上
4、git branch -d bug_overflow 修复完bug后,将分支删除
建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
$ git branch --set-upstream-to=origin/<remote_branch> <local_branch>
本地分支重命名
$ git branch -m
$ git branch -m | -M 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。
显示指定文件是什么人在什么时间修改过
$ git blame [file]
显示暂存区和上一个commit的差异
$ git diff --cached [file]
显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
显示两次提交之间的差异
$ git diff [first-branch]…[second-branch]
git log 控制显示的记录格式
git log --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>"
alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号’'将原来的命令引起来,防止特殊字符导致错误
alias gitlog=‘git log --pretty=format:’’’%h :%an :%ad :%s’’’ --topo-order --graph --date=short’
二、git配置(.gitconfig)
仅供参考
[user]
email = ***
name = ***
[core]
editor = vim
[color]
ui = true
branch = true
diff = true
status = true
log = true
pager = true
decorate = true
[color "branch"] current = red bold#reverse
local = yellow
remote = green
[color "diff"]
meta = yellow
old = green bold
new = red bold
whitespace = yellow
commit = yellow
frag = cyan
[color "status"]
added = yellow
changed = green
untracked = cyan
[color "grep"]
# external = yellow
match = red
linenumber = yellow # [-n]
[color "interactive"]
header = yellow
help = yellow
prompt = yellow
[color "log"]
commit = red
decorate = green
showroot = yellow
[alias]
log5 = log -5 #显示最近的5个提交
log10 = log -10 #显示最近的10个提交
glog = log --pretty=oneline --graph
st = status
co = checkout
ct = commit
cm = commit -m
df = diff
br = branch
bm = branch -m
bd = branch -D
ss = stash
ro = remote -v
pr = pull --rebase
po = push origin HEAD:refs/for/$1
[diff]
tool = bc3
[difftool]
prompt = false
[difftool "bc3"]
path = /usr/bin/bcompare
[merge]
tool = bc3
[mergetool]
prompt = false
[mergetool "bc3"]
path = /usr/bin/bcompare
[commit]
template = /home/***/.gitmsg
[push]
default = matching
三、git 常见问题及解决方案
问题1:The change could not be rebased due to a path conflict during merge.
解决方法:
git pull -r (git pull --rebase)将代码pull到最新,并将自己修改的代码打patch到最新代码上
git rebase 将本地所有修改打个patch,将代码拉到最新,将patch打到最新代码中,可能会有冲突需要解决。
出现冲突用git status可以查看冲突文件,用git mergetool -y 打开beyondcompare来自动合并冲突,检查一下合并后的文件,解决冲突无误之后用git rebase --continue
问题2:使用git时候会出现 missing change-id in commit message footer的情况在网上搜所得出的解决方案是:
方案1:把他提示你的那句话复制输入一下:类似 scp -p -P 9018 [email protected]:hooks/commit-msg .git/hooks/ 然后将Commit message中的"Change-Id:"删除,再push。
方案2:随便修改一个文件 ,然后重新git add,git commit --amend ,git push即可,如果还不行就将修改的代码回退到index区,再重新commit,push。