常用的git的一些东西
1. 一个好用的log别名
1
| git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
|
git lg
2. 远程仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 添加远程仓库 git remote add origin git@oschina.com:haha.git
# 更换远程仓库的地址,比如从https协议的地址换到ssl地址 git remote set-url origin new_url
# 检出远程分支 git checkout --track origin/dev_mc
# 查看远程仓库 git remote -v
# 提交到远程仓库 git push [remote] [branch]
# 提交所有本地匹配的分支到远端 git config --global push.default matching # 没有指明分支的话,只提交当前分支到远端 git config --global push.default simple
|
3. 标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 列出标签 git tag
# 添加含附注的标签 git tag -a v1.4 -m "my version 1.4"
# 添加轻量级标签 git tag v1.4-lw
# 给先前提交打上标签 git tag -a v1.2 9fceb02
# 上传标签到远程仓库 git push origin v1.5 git push origin --tags
|
4. 比较
1 2 3 4 5 6 7 8
| # 比较两个分支 git diff dev_mc..master
# 比较两个分支的共同父分支和master之间的区别 git diff dev_mc...master
# 列出比较的大概内容,方便看到哪些文件发生了改变 git diff --stat dev_mc..master
|
5. 修改最后一次提交
6. 撤销操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # reset会撤销提交,撤销的提交成为悬挂提交,再提交新的会丢掉先前的提交。 # checkout不会撤销历史,而是改变缓冲区和工作区。 # revert只能针对整个系统,而不能只针对某个文件路径。不会撤销提交历史,而是先将缓冲区和工作区 # 同步到revert的历史,再在分支上添加一个新的提交。这样是比较安全的做法。
# 重置提交历史,缓存区和工作区都不改变。 git reset --soft HEAD
# 缓存区会变,工作区不变。默认操作。 git reset --mixed HEAD
# 缓存区和工作区都改变,彻底不要当前修改 git reset --hard HEAD
# 回退两个提交 git reset HEAD~2
# checkout只会改变工作区,并不撤销提交历史。 git checkout HEAD~2
# revert不会撤销提交历史,而是先找到要回退的版本,再往后添加1个新的提交. # 回退两个,再提交1个新的提交。是比较安全的做法。这个不能针对文件层面进行操作 git revert HEAD~2
|
7. 忽略已经存在的文件
1 2 3 4 5 6 7 8
| # 先从cached中删除 git rm -r --cached .idea
# 再更新.gitignore git add .gitignore
# 最后提交 git commit -m "ignore .idea"
|
8. 代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # http代理 git config --global http.proxy "用户名:密码@127.0.0.1:6666"
# git协议代理(git协议也是走ssh,所以配置ssh就行了,不需HTTP代理服务器) # 在~/.ssh/config中配置如下: host AA hostname 192.168.0.100 port 1540 user root
host gitlab.com hostname gitlab.com user git ProxyCommand ssh -W %h:%p AA
|
9. 彩色输出
1
| git config --global color.ui auto
|
10 windows换行符问题
windows git 配置
1
| git config --global core.autocrlf true
|
- true: 提交转换成LF,检出转换成 CRLF
- input: 提交时转换LF,检出时不转换
- false: 都不转换
11 修改最后一次author
1
| git commit -amend --reset-author
|
12 patch
生成patch
1 2 3 4 5 6 7 8
| git format-patch HEAD^ #生成最近的1次commit的patch git format-patch HEAD^^ #生成最近的2次commit的patch git format-patch HEAD^^^ #生成最近的3次commit的patch git format-patch HEAD^^^^ #生成最近的4次commit的patch git format-patch <r1>..<r2> #生成两个commit间的修改的patch(包含两个commit. <r1>和<r2>都是具体的commit号) git format-patch -1 <r1> #生成单个commit的patch git format-patch <r1> #生成某commit以来的修改patch(不包含该commit) git format-patch --root <r1> #生成从根到r1提交的所有patch
|
应用patch
1 2
| git apply -3 patchfile git am -3 patchfile
|
然后使用vs的合并功能进行合并
13 软件自动生成版本号时, 从git取的相关信息,cmake相关配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| find_package(Git QUIET) if(GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD OUTPUT_VARIABLE COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) execute_process( COMMAND ${GIT_EXECUTABLE} symbolic-ref --short -q HEAD OUTPUT_VARIABLE BRANCH_NAME OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
execute_process( COMMAND ${GIT_EXECUTABLE} log --format=format:%aI -1 OUTPUT_VARIABLE COMMIT_TIME OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
execute_process( COMMAND bash -c "git diff --quiet --exit-code || echo _beta" OUTPUT_VARIABLE BETA_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) endif()
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/version.h.ini ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY)
message(STATUS "Git version is ${BRANCH_NAME} ${COMMIT_HASH}/${COMMIT_TIME} ${BUILD_TIME}")
|
version.h.ini中是这样的:
1 2 3 4 5
| #define COMMIT_HASH "@COMMIT_HASH@" #define COMMIT_TIME "@COMMIT_TIME@" #define BRANCH_NAME "@BRANCH_NAME@" #define BUILD_TIME "@BUILD_TIME@" #define BETA_VERSION "@BETA_VERSION@"
|
14 用reflog恢复本地丢失的提交
git reflog
查看本地所有提交过的记录,包括reset
掉的, 然后用git reset
强制恢复。
参考:
- https://segmentfault.com/q/1010000000430426
- https://imciel.com/2016/06/28/git-proxy/