一、git使用前的配置
1,git设置姓名和邮箱(与github账号无关)即提交代码时的用户信息
$ git config --global user.name "Cav4ever"
$ git config --global user.email "303146950@qq.com"
二、git管理github代码
1,生成秘钥(利用git向github push代码时必须,邮箱为github注册邮箱?不必)
$ ssh-keygen -t rsa -C "303146950@qq.com" 三次回车默认即可
2,找到生成的公钥id_rsa.pub拷贝内容,github头像-->设置-->ssh key
3,克隆代码 $ git clone git@github.com:Cav4ever/Makefile.git
4,修改 vim test.txt, 添加 git add test.txt,提交 git commit -m "commit the test file",同步到github,git push
三、Git 获取指定历史版本源代码
1,$ git clone git@github.com:Cav4ever/Makefile.git
2,进入工程目录,查看并拷贝需要的历史版本哈希值$ git log
$ git log --pretty=oneline --abbrev-commit
3,$ git checkout 75a3a1d7720f52000e1c05f186cde8d72ec5ce40
此时本地代码即可切回所需要的历史版本
四、比较两个版本的变动
1,git diff 版本哈希号码1 版本哈希号码2
五、将本地仓库和远程仓库建立连接(用于最初本地和github都空时同步代码)
1,通过git init命令把当前目录变为可以Git管理的仓库,经过这个操作,当前目录下多了一个.git的目录
2,编写ignore文件:不需要从头写.gitignore
文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore,该文件需要提交
3,将本地仓库和远程仓库建立连接:$ git remote add origin git@github.com:Cav4ever/Makefile.git(origin 是默认的远程版本库名称)
3,修改 添加 提交 同步push
六、git其他常用命令
查看当前没有add 的内容修改$ git diff
查看已经add 没有commit 的改动$ git diff --cached
查看当前没有add和commit的改动: git diff HEAD 或者 git status
比较两个版本号码的src 文件夹的差异:git diff 版本号码1 版本号码2 src
查看配置信息:$ git config --list
添加所有修改的和新添加的 $ git add . 或 $ git add -A
查看已有分支:git branch -a
clone相应的分支:git clone -b 分支名 || git clone --branch 分支名
git 强制放弃本地修改(新增、删除文件):git checkout . && git clean -df
git checkout . //放弃本地修改,没有add的可以回到未修改前版本
git clean是从工作目录中移除没有track的文件.-d表示同时移除目录,-f表示force
从已经克隆下来的代码里用git指令显示其url地址可以使用git remote -
v
重命名要clone的文件夹名:
$ git clone git@github.com:Cav4ever/Makefile.git 新文件夹名(缺省则为原始的Makefile)
· git add -A 提交所有变化
· git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
· git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
文件直接修改,添加,删除后,切换分支前如果没有commit,这些变换在切换后的分支中仍然存在,相当于在切换后的分支里做了这些修改,commit后再切分支,变化不可见。如果再add后commit前切分支,则相当于在切换后的分支里做了add,即工作区、暂存区对所有分支是全局的,公用的。
git log显示的是当前分支从无到有的整个过程,即假如该分支是在别的分支基础上新建的,则之前的那段历史也会被show出来。
切换分支前,可以使用git stash把当前工作现场“储藏”起来,等以后恢复现场后继续工作;
如何恢复现场呢?
git stash list
git stash apply stash@{0}
恢复后,stash内容并不删除,你需要用git stash drop
来删除
另一种方式是用git stash pop
,恢复的同时把stash内容也删了
git merge --no-ff -m "merge with no-ff" dev(Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息)
git tag //查看tag
git log --decorate=full
---------------------------------------------------------------------------------------------------------------
tag 管理
创建tag:$ git tag v1.0(tag名)
查看tag信息(commit id等):$ git show v1.0
创建带有说明的tag:$ git tag -a v1.1 -m "the 1.1 tag"
删除tag:$ git tag -d v1.1
推送tag到远程:$ git push origin v1.0
一次推送所有未推送的tag:$ git push origin --tags
删除远程tag:$ git tag -d v1.1 && git push origin :refs/tags/v1.1
如果有tag和branch同名,git checkout 会切到branch,想切到tag可以:$ git checkout tags/v1.0
应避免tag和branch同名
-------------------------------------------------------------------------------------------------------------------
分支管理
创建branch:$ git checkout -b branch1(相当于git branch branch1 && git checkout branch1)
删除分支:$ git branch -d branch1(不能在当前分支删除当前分支)
查看本地分支:$ git branch
查看所有分支:$ git branch -a(-v可查看更多信息)
推送分支到远程:$ git push origin branch1
删除远程分支:$ git push origin --delete branch1
查看两个tag之间的所有commitID:$ git log tag1 tag2 --decorate=full
重命名远程:
先删除远程分支:git push --delete origin newEdition
重命名本地分支:git branch -m newEdition clean_edition
重新提交一个远程分支:git push origin clean_edition
git merge
命令用于合并指定分支到当前分支
https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424
如何优雅的更新代码:自己基于master开发,master更新了,需要把master的更新merge到自己的分支:
1,先切分支到master并更新,git pull
2,切回自己的分支, git rebase master
----------------------------------------------------------------------------------------------
撤销修改:
未add的修改:git checkout -- README.md
add后未commit的修改:先git reset HEAD README.md再git checkout -- README.md
commit未push的修改:git reset --hard commit_id
git reset --hard HEAD^ (把git log最上面一条的内容扣除掉)
------------------------------------------------------------------------------------------------------
把一个分支分支的一部分代码提交到另外一个分支上
只合并某一次提交,而不是合并整个分支
git cherry-pick commit_id
(cherry picked from commit commit_id)
——---------------------------------------------------------------------
git show --color commit_id //看这次提交更新了哪些代码
git log file/pathname //check changes in this file/path
git show --color commit_id file/pathname //check changes in this file/path by this commitid
-------------------------------------------------------------------------------------------------------------------
git status -uno //不显示未跟踪文件
git diff --color
git checkout -f //放弃本地修改,强制检出代码
git branch -d XXX //删除分支
git checkout -b <branch> --track <remote>/<branch>
---------------------------------------------------------------------------------
修改author name
git config user.name 'username1'
git config user.email test1@qq.com
git commit --amend --reset-author
----------------------------------------------------------------------------------
git blame file 可以查看文件的具体部分是哪个patch进去的
--------------------------------------------------------------------------------
将本地恢复成clean状态
git rm --cached -r . && git reset --hard && git checkout . && git clean -df && git status