暂存管理: stash中的保存的内容在堆栈中(栈是先进后出
)
git stash
暂存
git stash save
作用等同于git stash,区别是可加注释,效果如下:
$ git stash save 'test'
Saved working directory and index state On 0305_ding_test: test
$ git stash list
stash@{0}: On 0305_ding_test: test
stash@{1}: On 0305_ding_test: aaa
git stash show
查看暂存中最新保存的stash和当前目录的差异
git stash show stash@{1}
查看暂存中指定的stash和当前目录差异
git stash show -p
查看暂存中详细的不同
git stash list
列出所有stash
git stash apply
恢复暂存内容
git stash apply stashName
(如stash@{1})指定恢复哪个stash到当前的工作目录
$git stash apply stash@{1}
git stash drop
删除暂存区
git stash drop stashName
删除暂存区某个指定的stash
git stash clear
清除暂存中的所有内容
查看所有分支(包括本地和远程)
git branch -a
git branch -r
切换分支
git checkout branch_name
切换到上一个分支
git checkout -
拉取远程分支并创建本地分支:git checkout -b 本地分支名dev origin/远程分支名dev
git checkout -b dev origin/dev
查看分支状态
git status
查看日志
git log
查看某个文件的提交记录
git log --pretty=oneline 文件路径
放弃本地所有修改
git checkout .
#恢复本地误删的文件
*以Service文件夹下的文件为例*
git reset HEAD ../Server
git checkout ../Server
*以applicationContext-test.xml文件为例*
localhost:hy-test$ git reset HEAD hy-test/src/test/resources/applicationContext-test.xml
Unstaged changes after reset:
D hy-test/src/test/resources/applicationContext-test.xml
M hy-test/src/main/java/com/hy/test/service/TestRemoteService.java
localhost:hy-test$ git checkout hy-test/src/test/resources/applicationContext-test.xml
删除本地分支staging_branch
git branch -D staging_branch
删除远程分支 staging_branch
git push origin --delete staging_branch
git 切换到之前版本上
git log 查看需要查看的版本的 commit 编码, 取前6位即可
git checkout 8d39ad
可以使用 git reset HEAD^
回溯到上一个版本
git reset –hard HEAD~100
回溯100个版本
回退后的版本强制推送到远程仓库:
git push -f origin master
git checkout [ 被删除的文件或文件夹 ],以temp文件夹为例,需要先后执行:
git reset HEAD ../temp
git checkout ../temp
代码托管在多个平台上,分别设置SSH-key,生成SSH密钥为不同文件中:
ssh-keygen -t rsa -C Jefxxxng@xxx.com -f ~/.ssh/gitlab_rsa
当前版本差异并保留目录结构
git diff >d:/a.diff
不同版本差异文件并保留目录结构
git diff --before:commitId --after:commitId > d:/b.diff
push远程仓库时,经常报出下面的错误,导致操作失败
$ git push origin HEAD
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决方案:
git pull origin branch_name
git push origin head -u
当 git push origin branch_name时遇到报错如下:
fatal:'origin' does not appear to be a git repository
fatal:Could not read from remote repository
解决方案:
git remote add origin git@github:xx_project-name.git
比较不同版本差异文件并打包
git diff 2aa78688025fe0 fee23ed8bb --name-only | xargs zip diff.zip
git diff 2aa78688025fe0 fee23ed8bb > diff.txt
回滚merge操作
1、git reflog
查看merge操作的提交记录的版本号
2、git reset –hard 版本号
回滚到merge之前的状态
示例:
localhost:$ git reflog
3f3b82aa (HEAD -> release-prod, origin/release-prod) HEAD@{0}: merge 1205-drm2.1: Merge made by the 'recursive' strategy.
bded7dc4 (origin/verify-lal) HEAD@{1}: checkout: moving from 1205-drm2.1 to release-prod
84274434 (origin/1205-drm2.1, 1205-drm2.1) HEAD@{2}: commit: test
db7b482c HEAD@{3}: checkout: moving from release-prod to 1205-drm2.1
bded7dc4 (origin/verify-lal) HEAD@{4}: merge 1205-drm2.1: Merge made by the 'recursive' strategy.
89cb8b65 (tag: 20191202151642576-release-prod, origin/hotfix-1202) HEAD@{5}: checkout: moving from 1205-drm2.1 to release-prod
db7b482c HEAD@{6}: checkout: moving from release-test to 1205-drm2.1
18320026 (release-test) HEAD@{7}: pull: Fast-forward
c72efbf0 HEAD@{8}: checkout: moving from release-prod to release-test
89cb8b65 (tag: 20191202151642576-release-prod, origin/hotfix-1202) HEAD@{9}: checkout: moving from release-test to release-prod
localhost:$ git reset --hard bded7dc4
HEAD is now at bded7dc4 Merge branch '1205-drm2.1' into release-prod
localhost:$ git reflog
bded7dc4 (HEAD -> release-prod, origin/verify-lal) HEAD@{0}: reset: moving to bded7dc4
3f3b82aa (origin/release-prod) HEAD@{1}: merge 1205-drm2.1: Merge made by the 'recursive' strategy.
bded7dc4 (HEAD -> release-prod, origin/verify-lal) HEAD@{2}: checkout: moving from 1205-drm2.1 to release-prod
84274434 (origin/1205-drm2.1, 1205-drm2.1) HEAD@{3}: commit: test
db7b482c HEAD@{4}: checkout: moving from release-prod to 1205-drm2.1
bded7dc4 (HEAD -> release-prod, origin/verify-lal) HEAD@{5}: merge 1205-drm2.1: Merge made by the 'recursive' strategy.
89cb8b65 (tag: 20191202151642576-release-prod, origin/hotfix-1202) HEAD@{6}: checkout: moving from 1205-drm2.1 to release-prod
db7b482c HEAD@{7}: checkout: moving from release-test to 1205-drm2.1
18320026 (release-test) HEAD@{8}: pull: Fast-forward
c72efbf0 HEAD@{9}: checkout: moving from release-prod to release-test
89cb8b65 (tag: 20191202151642576-release-prod, origin/hotfix-1202) HEAD@{10}: checkout: moving from release-test to release-prod
c72efbf0 HEAD@{11}: merge 1205-drm2.1: Merge made by the 'recursive' strategy.
8b266a63 HEAD@{12}: checkout: moving from 1205-drm2.1 to release-test
#代码量统计
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done