git commit
git commit -s
提交的信息中带有signed-off-by:
git log
git log filename/dir
查看某个文件/目录的历史
git log –stat
显示当前commit在上一次commit基础上修改了哪些文件及行数等信息。
git log -p
显示当前commit在上一次commit基础上修改的文件的内容
git log –pretty=oneline
查看历史,并且每个历史只显示一行
git log –author=””
查看某个作者提交的历史
git show
git show commit_number
查看某次提交的修改,会以详细的信息显示提交的差异
git show commit_number –stat
查看某次提交的修改,显示改动的文件及基本的信息
git diff
git diff commitA commitB 显示commitA需要做哪些修改才能到commitB
git diff commitA HEAD filename 查看两次commit之间的某个文件的修改
git diff –stat commitA commitB 查看两次提交之间有哪些文件差异
git diff HEAD~ –stat 查看HEAD与前一次commit之间有哪些文件差异
git diff HEAD~ filename 查看HEAD与前一次commit之间filename文件的差异
git stash
git stash 放进暂存区
git stash list 列出暂存区的文件
git stash pop 取出最新的一笔,并从暂存区中移除
git stash apply 取出但不移除
git stash clear 清除暂存区
git clean
-f和-d选项分别删除untracked files和目录
git push
git push origin
origin是远程主机
git rebase修改历史commit信息
1\ 对于最后一次commit信息的修改很简单,git commit -amend进入编辑界面之后直接修改信息就可以了
2\ 对于历史commit信息的修改,就必须要使用git rebase了,
git rebase -i HEAD~3,表示要修改当前版本的倒数第3次状态。
这个命令执行之后,会出来3行,
pick: **
pick: **
pick: **
如果你要修改哪个,就把那行的pick改成edit,然后退出,
这时通过git log你可发现,git的最后一次提交已经变成了你选的那个了,这时再通过git commit -amend来对commit进行修改,修改完了之后,
修改了之后要回来,使用git rebase —continue
ok了
git生成patch与打patch
git format-patch与git am搭配使用
git diff与git apply搭配使用
两个节点之间的提交: git format-patch 节点A 节点B
单个节点: git format-patch -1 节点A (-n就表示要生成几个节点的提交)
最近一次提交节点的patch :git format-patch HEAD^ 依次类推……
git配置
1)通过git config配置
查看已经设置的配置
git config –list
使用默认颜色配置
git config –global color.status auto
git config –global color.diff auto
git config –global color.branch auto
默认编辑器设置
git config –global core.editor vim
其实以上这些设置之后会保存在文件~/.gitconfig中
2)修改配置文件~/.gitconfig或者git分支中的.git/config文件,修改完后不用重启,直接生效。
[user]
name = xxx
email = xxx
例如,让git默认使用vim编辑器
[core]
editor = vim
例如,设置git颜色
[color]
status = auto
branch = auto
diff = auto
其他
1、修改文件名最好用git mv filename1 filename2
2、删除文件最好用git rm filename
3、git fetch + git merge = git pull(如果git merge遇到冲突如何处理?)
一种情况是你对一个正在修改代码的的分支执行git pull操作,结果提示:
error: Your local changes to ‘c/environ.c’ would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
意思是说merge更新下来的内容会把本地修改的内容覆盖,先提交你的改变或者先将本地修改暂存起来。(因为不管是git pull还是git merge都需要保证工作目录树是干净的)
1)先将本地修改暂存起来
git stash
这样本地的所有修改就都被暂存起来,用git stash list可以看到保存的信息:
stash@{0}: WIP on master: a80c24d …
stash@{0}就是刚才保存的标记
2)暂存了本地修改之后,就可以pull了
git pull
3)还原暂存的内容
git stash pop stash@{0}
系统提示类似的信息:
Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c
意思是系统自动合并并修改的内容,但是其中有冲突,需要解决其中的冲突。
4)解决完冲突后就可以正常的提交
4、对于服务器上没有审核的代码如果想拉下来实验,可以这样:git fetch ssh://[email protected]:29418/rlxlinux/kernel refs/changes/42/1342/2 && git checkout FETCH_HEAD
将会进入一个新的分支,你可以在这个分支上做任何修改而不会影响到其他的分支,一旦实验ok,也可以通过这个分支新建一个分支。