【Tool/Git】git 常用命令

推荐git 的图形化界面

  • SourceTree 个人感觉是一个值得推荐的图形化工具

git 相关信息命令

  • echo `git symbolic-ref --short -q HEAD`打印分支名
  • echo `git log -1 --decorate=short --oneline`打印当前分支信息
✗ echo `git log -1 --decorate=short --oneline`
bc085bcda4 (HEAD -> branch, origin/branch) branch_info
  • echo `git log -1 --format="%ct"`打印最后一次提交的short commit
  • echo `git log -1 --pretty=format:%H`打印最后一次提交的 long commit

主要命令

  • git add . 添加,准备提交。

  • git reset commitID重置 HEAD 的位置 (不建议使用)

  • git reset --hard重置 HEAD 的位置,并清除修改内容

  • git revert [commitId]重置某次提交,生成新的提交记录

  • git commit -m '[这里是修改的内容]'修改所有提交的内容,这样git 中就会多一个提交记录。

  • git commit --amend合并本地的上次提交记录并修改提交信息

  • git push [origin branchName]将 git 本地的代码 push 到远端

  • git merge master将 master 分支的代码合并到当前分支, 会生成新的合并节点。

  • git cherry-pick [commitId]将 commitId 的提交内容提取到当前分支。

  • git cherry-pick (commitId0..commitId1]批量

PULL

  • git pull
git pull = git fetch + git merge FETCH_HEAD 

git pull --rebase =  git fetch + git rebase FETCH_HEAD 

修改分支名

修改本地分支 dev 名为 dev0

  • git branch -m [dev0] 修改本地分支名
  • git push origin :[dev] 删除远程分支
  • git push origin [dev0] 把分支推送到远端
  • git branch --set-upstream-to=origin/dev dev 重新设置远程跟踪
  • git push --set-upstream origin pb_punch设置远程跟踪并推向远端(还没有验证,应该可以使用)
  • git branch -vv 查看最终结果
dev0    2360e01 [origin/dev0] 0

REBASE

进行 rebase 操作后记得一定要检查提交记录(确保 rebase 完成提交过程中远端没有新的 commit),并删除远程相关分支

  • pull --no-commit --rebase origin master 当前分支变基到 master 上

  • git rebase master将当前分支的所有提交记录,逐条提交到 master 的后方(注:提交的 commitId 会有变化)

  • git rebase [master] [branchA]以 master 分支为基准将 branchA 的记录追加到 master 之后。

  • git rebase -i [commitId]将当前分支指定挑选 commit 记录,修改形成新的分支。(注:这个用命令行操作不太会使用)

  • git rebase maseter -i [commitId]将 master 分支指定挑选 commit 记录,修改形成新的分支。

  • git rebase maseter -i branchA将 master 分支指定挑选 commit 记录,修改追加到 branchA 分支之后。

  • git rebase branchA master以 branchA 为基准分支,将 master 的提交记录放在 branchA 之后。

  • git rebase --continue继续进行 rebase

  • git rebase --skip跳过某个提交记录

  • git rebase --abort取消本次 rebase 过程

  • git push将本地代码推送到远端

  • git push -fgit rebase [branch] 之后本地分支和远程分支记录发生变化时候使用,本地记录强制覆盖远端。(注:不推荐使用,多人公用分支时候可能会覆盖他人代码

  • git push --force-with-leasegit push -f 安全, 在覆盖远端的时候会检测远端是否有新的提交变化,如果有则强制覆盖失败。

  • git branch -m '[dev0]' 把当前分支名修改为 dev0

  • git branch -m '[dev0] && git push origin [dev0]' 修改分支名以后推送到远端。[注:在rebase完成只有使用该方法或许也是一个避免代码丢失的好方法]

  • git rebase [commitId0] [commitId1] --onto [branchname] 将提交区间(commitId0, commitId1] 所有提交记录 rebase 到 branchname 分支上

  • git reset --hard origin/foo foo根据远程存储库,这将简单地抛弃本地状态以支持其历史记录

  • git checkout -b [branchname]基于当前分支创建一个新的分支branchname

  • git checkout -b [branchname] [develop]基于develop分支创建一个新的分支branchname

  • git checkout -- [filepath]将缓存区的文件替换工作区的问题件

Rebase 和 Merge 的区别

merge操作会生成一个新的节点,之前的提交分开显示。
而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。

  • 初始状态
       D---E test
      /
 A---B---C---F--- master
  • 在master执行git merge test,然后会得到如下结果:
       D--------E
      /          \
 A---B---C---F----G---   test, master
  • 在master执行git rebase test,然后得到如下结果:
 A---B---D---E---C'---F'---   test, master
  • REBASE 好处
想要更好的提交树,使用rebase操作会更好一点。
这样可以线性的看到每一次提交,并且没有增加提交节点。

merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了。

而rebase 操作的话,会中断rebase,同时会提示去解决冲突。
解决冲突后,将修改add后执行git rebase –continue继续操作,或者git rebase –skip忽略冲突。

忽略文件添加

  • 查看哪一行规则导致文件被忽略s使用命令 git check-ignore -v [path/filename]增加了规则却没有效果

.gitignore 只能作用于 Untracked Files,也就是那些从来没有被 GIT 记录过的文件,如果文件被 GIT 记录过,那么 .gitignore 对它们完全无效!

  • 对于已经维 护起来的文件,可以使用如下命令:
git update-index --assume-unchanged <file>
  • 使用该命令后,即使我们修改了该文件,GIT 也会默认我们没有修改,可以通过如下命令恢复
git update-index --no-assume-unchanged <file>
  • git上传的时候,我们已经将 xxx 文件添加到了.gitignore 中,但是在push 后,远程仓库还是会显示此文件。
  • 原因
    xxx 文件在前面已经被 git 跟踪,在这之后再添加到 .gitignore 中是无效的。
  • 解决方法
    在 .gitignore 中添加后,清除一下此文件的 git 缓存,git -rm -r --cached [path/file]文件名, 然后再进行 commit和 push即可。
    添加忽略文件流程
// 添加忽略文件
vi .gitignore
// 删除文件追踪
git rm -r --cached [path/file]
// 提交到远端
git add .
git commit -m 'update .gitignore'

STASH

  • git add . && git stash暂存当前提交(暂存是一个栈)
  • git stash list查看 stash 内容
 stash@{0}: WIP on dev: 1da4696 bbb
  • git stash pop stash@{0}存暂存区取出暂存内容(注:弹出第一条 stash,只可以应用一次后)

  • git stash apply stash@{0}存暂存区取出暂存内容(注:应用一条 stash,可以多次应用)

  • git stash save "save message": 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

  • git stash list:查看stash了哪些存储*)

  • git stash show:显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

  • git stash show -p: 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p

  • git stash apply:应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

  • git stash pop:命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

  • git stash drop stash@{$num}:丢弃stash@{$num}存储,从列表中删除这个存储

  • git stash clear:删除所有缓存的stash

  • git fsck --lost-foundstash 不小心clear 找回方法

TAG

  • git tag查看所有的 tag

  • git tag [branch_tag] -m 'describe'标记标签 v0

  • git tag --delete [branch_tag]删除本地 tag

  • git tag -a [tagName]添加标签

  • git push origin --tag [tagName]把标签推送到远端

  • git push origin tag --delete [tagName]删除远端的tag

  • git push origin [tagName] push单个tag,命令格式为:git push origin [tagname]

  • git push origin tag --delete [dev] 删除标签 dev (注:可以避免分支名和标签名重复的情况)

  • git push origin v1.0 将本地v1.0的tag推送到远端服务器

  • git push origin tag [tagName] 将本地 tag 的tagName推送到远端服务器

  • git push --tagsgit push origin --tags 本地的 tag 推送到远端

  • git push origin --tag :[tagName]删除远程标签

辅助重要命令

  • gitk -allgit log --graph 查看所有提交就的 graph

  • git reflog查看所有 log 包含已将删除的分支日志

  • git shortlog -s -n查看提交的统计信息

  • git describe branchA 查看当先分支描述(注:小长假后查看分支状态的好帮手)

  • git fetch -p 更新本地的追踪日志(注:删除本地远程已经不存在的追踪,这个很有用 fetch 时候强烈建议添加参数 -p)

  • git branch -vv 查看本地分支的远程同步状态(注:执行git fetch -p命令后才可以正常使用),如果发现有本地分支在远程中删除,强烈建议删除本地分支

➜  gitlearning git:(dev) ✗ git branch -vv
* dev    1da4696 bbb
  master 1da4696 [origin/master] bbb
  • git branch --unset-upstream 取消 upstream 流操作 (注:如果发现远程分支被删除执行这条命令,或者直接删除这个本地分支)

分支管理同步

  • git branch -a查看本地和远程分支的情况
  • git remote show origin查看本地和远程跟踪情况,有 stale 标识的为过时分支
  • git remote prune origingit fetch -p为同步远程分支

不建议使用名利(可能个人还没有弄明白使用场景)

  • git rebase [otherBranch] --rebase:将某个分支的代码rebase 到当前分支。(没有稳定性,会导致提交顺序为倒序

其它设置

git config --global pull.rebase true
git config --global rebase.autoStash true

Submodule 常用命令

  • git submodule add [gitRemoteUrl] [submodule-dir]添加 submodule
  • git submodule set-branch --branch [branch-name] [submodule-dir]修改指定 submodule 的分支名
  • git submodule update --remote同步 submodule 和远程对应分支的代码
  • git submodule update同步 submodule 的当前分支和远程分支的代码,如果修改的 submodule 配置的分支则无效
  • git submodule init
  • git submodule sync
  • git submodule foreach '[git command]'

问题解决

warning: There are too many unreachable loose objects; run ‘git prune’ to remove them.
原因是因为提交的改动过多,导致本地的缓冲区占用太大。

解决方法: 可以执行以下命令,清理优化本地的 git 项目
git gc --prune=now

您的一举一动都是对我的莫大支持

您的一举一动都是对我的莫大支持

友情链接

git 学习资料

推荐练习 git 命令的好工具

  • 工具可以练习 初级,中级,高级的命令内容。
  • 但是对于开发者来说,这些练习都是初级用法,可不要偷懒哦!!!
    工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值