上篇文章:嵌入式开发 Linux 常用命令系列 3 目录任意跳转命令 – autojump
可以通过下面命令查看git配置信息
git config --list
config list 分全局和局部:
设置用户名称与邮件地址。这样做很重要,因为 Git 的每笔提交都会使用这些信息,并且它会写入到每一次提交中,不可更改。
git config --global user.email "邮箱"
git config --global user.name "用户名"
如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论在该系统上做任何事情, Git 都会使用那些信息。
git config --global alias.ck checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.st status
git config --global core.editor vim
git 默认编辑器是 nano
,如果恢复默认编辑器,可以使用下面命令进行配置:
git config --global core.editor nano
git checkout -b demo-4.14 aosp/demo-4.14
很久没有更新了,需要再和远程同步
git branch --set-upstream-to=aosp/demo-4.14 demo-4.14
不用使用git checkout xxx切换到远程分支即可查看代码
git blame aosp/demo-4.4 drivers/pwm/pwm-pxa.c
查看本地分支对应于哪个远程分支
git branch -vv
删除远程分支
git push origin --delete hehe
通常提交patch 都是使用下面流程:
git add . //覆盖范围为当前目录及其子目录
git commit -s -a //提交全部修改
git push origin HEAD:refs/for/master
在有些时候只想 git add
修改过的文件也即 “modified files”, 不需要 git add untracked files, 这个时候可以使用 git add -u .
。
我们都知道 push 命令的作用是将本地当前分支的代码推送到远程指定的分支上,其命令的格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
使用 git push
命令将 <本地分支名> 的代码推送到 <远程主机名> 中的 <远程分支名> 上。
<远程主机名> :指的是你想要推送到哪个远程主机中,在我们克隆一个项目的时候,git
会自动帮我们把远程主机起名为 origin,一般情况下是不会去修改这个名字的。
<本地分支名>:是本地分支的名字,可以使用命令 git branch
来查看本地有哪些分支。
<远程分支名>:指的是远程主机中的分支名,如果远程主机没有这个分支,则会新创建一个。
1). 通常写法
git push origin dev:test
将本地的 dev
分支上的代码推送到远程主机名为 origin
中 test
的分支上。如果远程的 test
分支不存在,则会被创建。
2.省略: <远程分支名>
如果本地分支名和远程分支名一样的情况下,可以省略:<远程分支名>
。如果远程主机中不存在该分支,那么会被创建。我们就可以使用命令:
git push origin dev
3. 省略本地分支写法
看下下面格式的解析:
git push origin HEAD:refs/for/master
git push :表示推送代码到远程服务器;
origin : 表示远程的库的名字;
master:表示远程分支的名字。;
HEAD: 表示一个特别的指针,指向你正在工作的本地分支的指针,可以当做是本地分支的别名。git通过它可以知道当前工作区间在哪个分支;
refs/for :表示我们提交代码到服务器之后是需要经过 code review 之后才能进行merge 操作的,而 refs/heads
是不需要的。
改命令用来删除 一些没有 git add 的 文件(没有tracked过的文件)
-n 显示将要删除的文件和目录
-f 删除 文件,-df 删除文件和目录
恢复git clean方法:
1). 执行git reflog
2). git reset --hard 6e8d3e3(指定commit的sha码)
3) 如果效果还不理想的话,采用终极命令
git fsck --lost-found
作用等同于 git stash,区别是可以加一些注释,如下:
git stash save “test1”
git stash list
查看当前stash中的内容
git stash pop
将当前stash中的内容弹出,并应用到当前分支对应的工作目录上
git rm -r --cached .
git clean -fdx . 会清除untracked 的文件
下载 .git-completion.bash文件。
如果是 cygwin终端可以使用下面命令:
apt-cyg install bash-completion
source ~/.git-completion.bash
当修改该过文件file之后,再使用 git add file 将其加入缓存中,但是后面发现不需要修改了,这个时候可以使用下面命名将其从缓冲区中删除。
git add file
git status .
git rm --cached file
git clean -fdx . 会清除 untracked 的文件
git rebase -i 的使用
git rebase -i change_id(目标patch的前一个change_id)
对应的 comment 改成 edit 模式, 重新修改 patch(修改甚至可以是git reset --hard HEAD^
:也即去除该patch)
git commit --amend -s
git rebase --continue
git log
之後如下显示,这个时候如果想修改 test2.c 这个文件。
git log
commit 25db05a5dab80237a72bf4df3122fe17f27b56e6 (HEAD -> master)
new: test:test3.c
commit eaffc8a491e8e1a44bc4375caf489ab31a39ff6a
new: test:test2.c
commit 5e9690990bc707ad4269e931761563494cbea290 (origin/master, m/master)
new: test:test1.c
第一步:执行 git rebase -i change_id
如下:
git rebase -i 5e9690990bc707ad4269e931761563494cbea290
pick eaffc8a49 NEW: Profile: add udp profile
pick 25db05a5d NEW: UDP: add header files for udp version
# Rebase 5e9690990..25db05a5d onto 5e9690990 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
第二步:將上面内容的一行 pick 修改为 edit,然后 wq 退出,会输出下面提示信息:
Stopped at eaffc8a49... NEW: Profile: add udp profile
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
第三步:修改需要修改的文件, 然后提交:
root@root: git commit --amend file1.c file2.c
root@root: git rebase --continue
Successfully rebased and updated refs/heads/master.
git format-patch -18
git am *.patch
请参考:
https://www.jianshu.com/p/a09a9b40ad20
https://blog.csdn.net/Saintmm/article/details/120847019
$ git add *.h
$ git add *.c
随着时间越长,你每次执行 git status 命令会越来越慢。这是由于本地有过多的缓存造成的。git 为这个问题提供了一个简单的解决方案,那就是:
git gc
这个命令会清理不必要的文件并优化本地存储库,git gc 命令在你的仓库中执行 “garbage collection”,删除数据库中不需要的文件和将其他文件打包成一种更有效的格式。
repo forall -c
此命令遍历所有的git仓库,并在每个仓库执行-c所指定的命令,被执行的命令不限于git命令,而是任何被系统支持的命令,比如: git log, git status, git checkout等。
repo forall -p -c git statsu
repo forall -p -c git checkout