git command and git config

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处:http://blog.csdn.net/neuq_jtxw007 https://blog.csdn.net/neuq_jtxw007/article/details/82979102

一、常用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。

猜你喜欢

转载自blog.csdn.net/neuq_jtxw007/article/details/82979102