推荐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 commitecho `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 -f当git rebase [branch]之后本地分支和远程分支记录发生变化时候使用,本地记录强制覆盖远端。(注:不推荐使用,多人公用分支时候可能会覆盖他人代码) -
git push --force-with-lease比git 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/foofoo根据远程存储库,这将简单地抛弃本地状态以支持其历史记录 -
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 --tags或git push origin --tags本地的 tag 推送到远端 -
git push origin --tag :[tagName]删除远程标签
辅助重要命令
-
gitk -all或git 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 origin和git 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]添加 submodulegit submodule set-branch --branch [branch-name] [submodule-dir]修改指定 submodule 的分支名git submodule update --remote同步 submodule 和远程对应分支的代码git submodule update同步 submodule 的当前分支和远程分支的代码,如果修改的 submodule 配置的分支则无效git submodule initgit submodule syncgit submodule foreach '[git command]'
问题解决
warning: There are too many unreachable loose objects; run ‘git prune’ to remove them.
原因是因为提交的改动过多,导致本地的缓冲区占用太大。
解决方法: 可以执行以下命令,清理优化本地的 git 项目
git gc --prune=now
您的一举一动都是对我的莫大支持
您的一举一动都是对我的莫大支持
友情链接
推荐练习 git 命令的好工具
- 工具可以练习 初级,中级,高级的命令内容。
- 但是对于开发者来说,这些练习都是初级用法,可不要偷懒哦!!!
工具
1万+

被折叠的 条评论
为什么被折叠?



