git help
git config
1 | git config --global http.proxy http://127.0.0.1:9090 |
hexo d 即可部署;
最后取消代理,依次输入:
1 | git config --global --unset http.proxy |
initialize
1 | git init |
check status
1 | git status |
1 | rm -rf .git |
git 笔记
1 远程仓库相关命令
检出仓库:
$ git clone git://github.com/jquery/jquery.git
查看远程仓库:
$ git remote -v
添加远程仓库:
$ git remote add [name] [url]
删除远程仓库:
$ git remote rm [name]
修改远程仓库:
$ git remote set-url –push[name][newUrl]
拉取远程仓库:
$ git pull [remoteName] [localBranchName]
推送远程仓库:
$ git push [remoteName] [localBranchName]
2 分支(branch)
查看本地分支:$ git branch
查看远程分支:$ git branch -r
创建本地分支:$ git branch [name] —-注意新分支创建后不会自动切换为当前分支
切换分支:$ git checkout [name]
切换远程分支:$repo forall -c git co -b 本地分支名 跟踪的远程分支名 gerrit_dev lichee/nand_dev
查看本地分支跟踪的远程分支:git br -vv
修改本地分支跟踪的远程分支,配置文件.git\config中:
[branch “t3_dev”]
remote = gerrit 这里指跟踪远程分支remotes/gerrit/t3_dev,修改此处。
merge = refs/heads/t3_dev merge点
修改分支名称:git branch -m oldName newName
创建新分支并立即切换到新分支:$ git checkout -b [name]
删除分支:$ git branch -d [name] —- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
合并分支:$ git merge [name] —-将名称为[name]的分支与当前分支合并
创建远程分支(本地分支push到远程):$ git push origin [name]
删除远程分支:$ git push origin :heads/[name]
把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支。
git push <远程主机名> <本地分支名>:<远程分支名>)
$ git push origin test:master // 提交本地test分支作为远程的master分支 //好像只写这一句,远程的github就会自动创建一个test分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
删除远程的分支,类似于上面,如果:左边的分支为空,那么将删除:符号右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
3 版本(tag)
查看版本:$ git tag
创建版本:$ git tag [name]
删除版本:$ git tag -d [name]
查看远程版本:$ git tag -r
本地版本push到远程:$ git push 分支名 tag名
删除远程版本:$ git push origin :refs/tags/[name]
切换到版本:git co 版本名
本地添加tag:auto_T5_Qt5.12.5_linux4.9_dev_v1.0
repo forall -cpv git tag auto_T5_Qt5.12.5_linux4.9_dev_v1.0 -m “auto_T5_Qt5.12.5_linux4.9_dev_v1.0”
推送tag到服务器:
repo forall -cpv git push gerrit auto_T5_Qt5.12.5_linux4.9_dev_v1.0
本地删除tag:auto_T5_Qt5.12.5_linux4.9_dev_v1.0
git tag -d auto_T5_Qt5.12.5_linux4.9_dev_v1.0
删除服务器对应tag:
git push origin –delete tag
git push origin :refs/tags/
git push gerrit :refs/tags/auto_T5_Qt5.12.5_linux4.9_dev_v1.0
查看各工程最新tag:
repo forall -cp git describe –abbrev=0
示例,为历史提交9fceb02添加标签v1.2:
git tag -a v1.2 9fceb02
4 子模块(submodule)
添加子模块:$ git submodule add [url] [path]
如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模块:$ git submodule init —-只在首次检出仓库时运行一次就行
更新子模块:$ git submodule update —-每次更新或切换分支后都需要运行一下
删除子模块:(分4步走哦)
1)$ git rm –cached [path]
2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉
4) 手动删除子模块残留的目录
5 忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db
6 重置和还原
git clean -dfx
-n 查看将删除的内容,并不执行删除
-i 交互式删除
-f 删除未跟踪文件
-d 删除未跟踪目录
-x 同时删除.gitignore中忽略的内容
重置初始状态:
git reset –hard HEAD
git clean -xfd
回退到指定时间:
repo forall -c ‘commitID=git log –before “2021-01-28 07:00” -1 –pretty=format:”%H”; git reset –hard $commitID’
7 别名
设定别名,需要在git项目根目录执行,否则会报错:fatal: Unable to read current working directory: No such file or directory
git config –global alias.psm “push origin master”
git config –global alias.br branch
git config –global alias.ch status -uno
git config –global alias.co checkout
git config –global alias.ci commit
git 别名设定是放在config里:
[alias]
lg = log –color –graph –pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit
ci = commit
st = status
co = checkout
br = branch
查看别名列表:
git config –list|grep alias
取消co=checkout的别名
git config –global –unset alias.co
使用外部命令:
将 git visual 定义为 gitk 的别名:
$ git config –global alias.visual ‘!gitk’
8 git log
-p 显示提交差异明细
–stat 简要显示增改行数
–graph 图形显示分支信息
路径:显示指定路径的log内容。
–pretty 显示偏好 信息长短等
–since, –after 仅显示指定时间之后的提交。
–until, –before 仅显示指定时间之前的提交。
–author 仅显示指定作者相关的提交。
–committer 仅显示指定提交者相关的提交。
统计一段时间
git log –after=“2018-05-21 00:00:00” –before=“2018-05-25 23:59:59”
查看提交记录修改文件
git log -p -U1 –word-diff –since =“2018-07-19 00:00:00” –until=“2018-07-19 23:00:00” –name-only –oneline –reverse
查看简要提交信息
git log –oneline –since =“2018-07-19 00:00:00” –until==“2018-07-19 23:00:00”
导出操作日志
git log –pretty=format:“%h:%an 提交信息:%s” –since =“2018-07-19 00:00:00” –until=“2018-07-19 23:00:00”
git log –after=“2018-08-21 00:00:00” –graph –date=format:‘%Y-%m-%d %H:%M:%S’ –pretty=format:‘%Cred%h%Creset - 【%an】 %C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)%Creset’
设置git log显示日期格式的方法
git config log.date iso
git config –global log.date iso
–date=iso (or –date=iso8601) shows timestamps in ISO 8601 format.
–date=relative shows dates relative to the current time, e.g. “2 hours ago”.
9 提交
git -am 直接提交未add的文件。
10 patch补丁和应用
使用git format-patch生成所需要的patch:
当前分支所有超前master的提交:
git format-patch -M master
某次提交以后的所有patch:
git format-patch 4e16 –4e16指的是commit名
从根到指定提交的所有patch:
git format-patch –root 4e16
生成旧版本365a和新版本4e16提交之间的所有patch:
git format-patch 365a…4e16 –旧365a和新4e16分别对应两次提交的名称
检查旧版本365a和新版本4e16之间有差异的文件,并导出这些文件的4e16新版本:
git archive4e16 $(git diff 4e16 365a –name-only) -o update_after.zip
某次提交(含)之前的几次提交:
git format-patch –n 07fe –n指patch数,07fe对应提交的名称
故,单次提交即为:
git format-patch -1 07fe
git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了– numbered-files选项,则文件名只有编号,不包含提交信息;如果指定了–stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o
指定patch的存放目录;
应用patch:
先检查patch文件:git apply –stat newpatch.patch
检查能否应用成功:git apply –check newpatch.patch
打补丁:git am –signoff < newpatch.patch
(使用-s或–signoff选项,可以commit信息中加入Signed-off-by信息)
git am 可以一次合并一个文件,或者一个目录下所有的patch, 在使用git am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。
不然会遇到这样的错误。
.git/rebase-apply still exists but mbox given.
https://blog.csdn.net/u012701023/article/details/82984026
11 git diff补丁和应用
git diff 旧版本…新版本
git diff master > patch(生成标准patch)
git diff 365a…4e16 > patch
如果包含so、bin等二进制文件,使用–binary:
git diff auto_T5_Qt5.12.5_linux4.9_dev_v1.0 –binary > auto_T5_Qt5.12.5_linux4.9_dev_v1.1.patch
应用patch
git apply patch
cd device/config/chips/t507/
patch -p1 <…/…/…/…/…/0011-br-use-sun8iw50p9_longan_min_defconfig.patch
git add -u .
git commit -m “br use sun8iw50p9_longan_min_defconfig”
cd …/…/…/…/
生成从旧版本81890ea到新版本2a37980的diff:
git diff 81890ea…2a37980 >
12 导出文件:
git archive 版本号|提交号 -o 输出文件名.zip 需要导出的文件或目录
命令请在git根目录运行。其中压缩格式可以通过 –format=zip来指定。当未指定–format时,会根据输出文件名的后缀智能判断。支持格式:
git archive -l
tar
tgz
tar.gz
zip
1
2
3
4
5
1.导出尚未提交的文件:
zip -r …/diff.zip $(git diff –name-only)
zip -r …/diff.zip git diff –name-only
tar -cjvf …/diff.tar.bz2 git diff –name-only
tar -cjvf …/diff.tar.bz2 $(git diff –name-only)
1.导出仓库最新内容:
git archive HEAD -o laest.zip ./
2.导出版本v1.0 tag的内容:
git archive v1.0 -o laest.zip ./
3.导出最新一次提交的对比文件:
修改之后:
git archive HEAD $(git diff HEAD HEAD~ –name-only) -o update_after.zip
修改之前:
git archive HEAD~ $(git diff HEAD HEAD~ –name-only) -o update_before.zip
检出旧版本365a和新版本4e16提交之间的所有不同的文件,并导出这些文件的4e16新版本:
git archive4e16 $(git diff 4e16 365a –name-only) -o update_after.zip
检出v1.0和v1.1的差异更新:
repo forall -cp git archive HEAD $(git diff v1.0 v1.1 –name-only) -o update_files.zip
linux-4.9$: git archive HEAD ( g i t d i f f a u t o T 5 Q t 5.12. 5 l i n u x 4. 9 d e v v 1.0 a u t o T 5 Q t 5.12. 5 l i n u x 4. 9 d e v v 1.1 − − n a m e − o n l y ) − o u p d a t e f i l e s . z i p l i n u x − 4.9 (git diff auto_T5_Qt5.12.5_linux4.9_dev_v1.0 auto_T5_Qt5.12.5_linux4.9_dev_v1.1 –name-only) -o update_files.zip linux-4.9(gitdiffauto
T
5
Q
t5.12.5
l
inux4.9
d
ev
v
1.0auto
T
5
Q
t5.12.5
l
inux4.9
d
ev
v
1.1−−name−only)−oupdate
f
iles.ziplinux−4.9:
linux-4.9: l i n u x − 4.9 : linux-4.9:linux−4.9:git diff auto_T5_Qt5.12.5_linux4.9_dev_v1.0 auto_T5_Qt5.12.5_linux4.9_dev_v1.1 –binary > auto_T5_Qt5.12.5_linux4.9_dev_v1.1.patch
13 git stash
保存到栈:
git stash save -u 只保存修改的文件,-a保存所有包含为跟踪的文件
查看保存的栈:
git stash list
kun$:git stash list
stash@{0}: On (no branch): ./
stash@{1}: WIP on linux_ae1_dev: a3393c8 update class camera_dev
查看修改:
aw_lib$:git stash show
aw_lib/api_test/aud_rec/AudRecTest.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++———————-
aw_lib/api_test/aud_rec/aud_rec | Bin 40392 -> 44528 bytes
aw_lib/api_test/aud_rec/output/pcm_cbk1 | Bin 958464 -> 0 bytes
aw_lib/api_test/aud_rec/output/pcm_cbk1.pk | Bin 11308 -> 0 bytes
aw_lib/api_test/aud_rec/output/pcm_cbk2 | Bin 1921024 -> 0 bytes
aw_lib/api_test/aud_rec/test.bat | 5 ++++-
aw_lib/aw_audio_rec/AWAudioRecImpl.cpp | 25 +++++++++++++————
aw_lib/aw_audio_rec/AWAudioRecImpl.h | 2 +-
aw_lib/include/AWAudioRec.h | 17 ++++++++++——-
sdk_lib/lib64/aud_rec | Bin 14728 -> 18824 bytes
sdk_lib/lib64/libaw_audio_rec.so | Bin 60896 -> 60912 bytes
11 files changed, 83 insertions(+), 43 deletions(-)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
查看改动详细:
kun$:git show stash
commit 6ea0c1a75065af56efadf62654afe5b87f2df48d
Merge: a3393c8 fcca4ba
Author:Aero
Date: 15 秒钟前
WIP on linux_ae1_dev: a3393c8 update class camera_dev
diff –cc aw_lib/api_test/aud_rec/AudRecTest.cpp
index 12783f2,12783f2..9c742a5
— a/aw_lib/api_test/aud_rec/AudRecTest.cpp
+++ b/aw_lib/api_test/aud_rec/AudRecTest.cpp
@@@ -17,6 -17,6 +17,9 @@@ typedef struct TestParm
char outputFile[256];
int testWay;
int testTimes;
++ unsigned int channels;
++ unsigned int sampleRate;
++ unsigned int format;
} TestParm;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
恢复最近的栈并删除:
git stash pop
恢复某栈但不删除:
git stash apply stash@{0}
出错处理:
kun$:git stash pop stash@{0}
aw_lib.si4project/Backup/AWAudioEnc(5499).h already exists, no checkout
aw_lib.si4project/Backup/AWAudioEnc(6750).h already exists, no checkout
aw_lib.si4project/Backup/AWAudioEnc(7644).h already exists, no checkout
aw_lib.si4project/Backup/AWAudioEnc(8126).h already exists, no checkout
aw_lib.si4project/Backup/AWAudioEncImpl(1418).cpp already exists, no checkout
aw_lib.si4project/Backup/AWAudioEncImpl(7900).h already exists, no checkout
aw_lib.si4project/Backup/AWAudioRec(1532).h already exists, no checkout
aw_lib.si4project/Backup/AWAudioRec(2359).h already exists, no checkout
查看记录:
kun$:git log –graph –all –decorate –oneline
*-. 73b0d16 (refs/stash) WIP on linux_ae1_dev: a3393c8 update class camera_dev
|
| | * f082106 untracked files on linux_ae1_dev: a3393c8 update class camera_dev
| * bce30d1 index on linux_ae1_dev: a3393c8 update class camera_dev
|/
a3393c8 (HEAD, origin/linux_ae1_dev, linux_ae1_dev) update class camera_dev
a32de86 rebuild class camera_dev
d33f3a1 add audio_record_ok
0141110 add aw_sample test
7092f2b [aud recorder]
23f009c add sdk_lib
395f2c5 add recorder.
c30ec7a add sample code.
2802cac add linux team cbb and bug progect
c152e28 Modify access rules
83d5cc6 Created project
e798db1 (origin/master, origin/HEAD, master) Initial empty repository
导出refs/stash的记录
kun$:git co 73b0d16
Note: checking out ‘73b0d16’.
You are in ‘detached HEAD’ state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD 目前位于 73b0d16… WIP on linux_ae1_dev: a3393c8 update class camera_dev
重置提交:
kun$:git reset HEAD~1
重置后取消暂存的变更:
M aw_lib/api_test/aud_rec/AudRecTest.cpp
M aw_lib/api_test/aud_rec/aud_rec
D aw_lib/api_test/aud_rec/output/pcm_cbk1
D aw_lib/api_test/aud_rec/output/pcm_cbk1.pk
D aw_lib/api_test/aud_rec/output/pcm_cbk2
M aw_lib/api_test/aud_rec/test.bat
M aw_lib/aw_audio_rec/AWAudioRecImpl.cpp
M aw_lib/aw_audio_rec/AWAudioRecImpl.h
M aw_lib/include/AWAudioRec.h
M sdk_lib/lib64/aud_rec
M sdk_lib/lib64/libaw_audio_rec.so
重新用-u保存:
kun$:git stash save -u ./
Saved working directory and index state On (no branch): ./
HEAD 现在位于 a3393c8 update class camera_dev
切换原分支:
kun: g i t c o l i n u x a e 1 d e v 切换到分 支 ′ l i n u x a e 1 d e v ′ 您的分支与上游分 支 ′ o r i g i n / l i n u x a e 1 d e v ′ 一致。查看保存: k u n :git co linux_ae1_dev 切换到分支 ‘linux_ae1_dev’ 您的分支与上游分支 ‘origin/linux_ae1_dev’ 一致。 查看保存: kun:gitcolinux
a
e1
d
ev切换到分支
′
linux
a
e1
d
ev
′
您的分支与上游分支
′
origin/linux
a
e1
d
ev
′
一致。查看保存:kun:git stash list
stash@{0}: On (no branch): ./
stash@{1}: WIP on linux_ae1_dev: a3393c8 update class camera_dev
重新恢复修改:
git stash apply stash@{1}
删除 aw_lib/api_test/aud_rec/output/pcm_cbk2
删除 aw_lib/api_test/aud_rec/output/pcm_cbk1.pk
删除 aw_lib/api_test/aud_rec/output/pcm_cbk1
位于分支 linux_ae1_dev
您的分支与上游分支 ‘origin/linux_ae1_dev’ 一致。
14 cherry-pick:
git cherry-pick commitid:提交另一分支的某一个提交。
git cherry-pick -n commitid:合并修改,但不提交commit。
git cherry-pick -e commitid:重新编辑提交信息。
git cherry-pick < branchname >: 该分支顶端提交进cherry-pick
git cherry-pick …< branchname > :
git cherry-pick ^HEAD < branchname >; 以上两个命令作用相同,表示应用branchname创建以来的所有提交引入的更改,
15 忽略跟踪文件
语法:
#为注释
忽略文件:和目录:
直接填写文件和目录的名字:
$ cat .gitignore
this is .gitignore file.
#忽略 所有名字为bin的文件和文件夹,包括所有子文件夹
bin
#忽略所有后缀名为o的文件
*.o
#忽略所有后缀名为d和i的文件
*.[io]
#反向规则,在上述基础上,保留keep文件夹下所有后缀名为d和i的文件
!kepp/*.[io]
#忽略文件out,但保留out文件夹
out
!out/
#表示多级目录,在上述基础上,保留keep文件夹下的所有keep.o文件
!keep//keep.o
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
如果文件已经被跟踪, 再添加gitignore无效.
gitignore需要提交之后才生效;
16. repo回退到指定时间的版本
repo forall -c ‘commitID=git log --before "2024-11-11 02:00" -1 --pretty=format:"%H"
; git reset –hard $commitID’
1