创建完成后,我们就得到了仓库的https以及SSH的地址:
https地址:https://github.com/用户名/仓库名.git
SSH地址:[email protected]:用户名/仓库名.git
其他系统安装git可查看官方文档:https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
安装完成后即可使用git-bash
执行完之后,会在User文件夹的用户下创建.ssh文件夹,其中有一个id_rsa.pub文件,复制其中的key
设置用户名:git config --global user.name “用户名”
设置邮箱:git config --global user.email “github邮箱”
检查配置:git config --list
git init会在当前目录下创建隐藏的.git文件夹,使目录变为git可以管理的仓库
fileName 可使用通配符.
取消已经commit但并未push到远程仓库的文件
查看文件状态
撤销之前对< fileName >文件的修改,除非你非常确认,否则不要轻易使用这个命令,使用该命令后,之前对该文件的修改将全部移除。
列出已配置的远程服务器
添加远程仓库,< shortname> 是< url>的简写
执行git reset --soft HEAD^
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
参数解释:
–mixed :不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
–soft :不删除工作空间改动代码,撤销commit,不撤销git add .
–hard :删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
代码合并
查看提交历史
git remote -v 检查配置
git remote rm < shortname> 移除错误配置
git remote add origin [email protected]:用户名/仓库名.git 重新关联远程仓库
第一次提交到远程仓库,需要添加-u参数
错误信息:failed to push some refs to ‘http://xxxxxx/xxx.git’
解决方案:1.git pull origin master 2.git push origin master
错误信息:fatal: refusing to merge unrelated histories
问题原因:其实这个问题是因为 两个 根本不相干的 git 库 其实这个问题是因为 两个 根本不相干的 git 库
方案1:从远端库拉下来代码 , 本地要加入的代码放到远端库下载到本地的库, 然后提交上去 , 因为这样的话, 你基于的库就是远端的库, 这是一次update了
方案2:git pull origin master --allow-unrelated-histories 后面加上 --allow-unrelated-histories , 把两段不相干的 分支进行强行合并
错误信息:failed to push some refs to
问题原因:这个问题是因为远程库与本地库不一致造成的,那么我们把远程库同步到本地库就可以了。
解决方案:git pull --rebase origin master
这条指令的意思是把远程库中的更新合并到本地库中,–rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。
之后重新执行commit命令及push命令即可
git push origin master -u
错误信息:Your local changes to the following files would be overwritten by merge…Please, commit your changes or stash them before you can merge.
问题原因:这种情况大多是由于修改了文件,然后没有进行及时的提交代码到远程仓库中造成的冲突,工作中经常发生这种冲突。
方案1:保留本地的修改 的改法
git stash
git pull
git stash pop
方案2:放弃本地修改 的改法
git reset --hard
git pull
通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git >pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一>致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
错误描述:The following untracked working tree files would be overwritten by checkout
问题原因:通过错误提示可知,是由于一些untracked working tree files引起的问题。所以只要解决了
这些untracked的文件就能解决这个问题。
解决方案:直接执行git clean -d -fx即可。可能很多人都不明白-d,-fx到底是啥意思,其实git clean -d -fx表
示:删除 一些 没有 git add 的 文件;
git clean 参数 :
-n 显示将要删除的文件和目录;
-x -----删除忽略文件已经对git来说不识别的文件
-d -----删除未被添加到git的路径中的文件
-f -----强制运行
执行顺序:
git clean -n
git clean -df
git clean -f
1.1. 在工作目录中初始化新仓库
git init
1.2. 将文件纳入版本控制
git add .
git commit -m 'description'
1.3. 从现有仓库中克隆
git clone [resp_url]
1.4. 检查文件状态
git status
1.5. 创建.gitimnore文件
cat .gitignore
1.6. 查看差异
//查看已暂存的文件和上次提交时的差异
git diff --cached
git diff --staged //高版本使用
1.7. 提交更新
git commit
git commit -a //跳过git add直接提交所有已跟踪过的文件
1.8. 移除文件
git rm [file_name]
git rm -f //强制删除
git rm --cached //移除文件跟踪,但不删除文件
1.9. 移动文件
git mv file_from file_to
1.10. 查看提交历史
git log
git log -p //显示每次提交的内容差异
git log -p -2 //显示最近的两次更新
git log 常用选项 | 说明 |
---|---|
-p | 按补丁格式显示每个更新之间的差异 |
–word-diff | 按 word diff 格式显示差异 |
–stat | 显示每次更新的文件修改统计信息 |
–shortstat | 只显示 --stat 中最后的行数修改添加移除统计。 |
–name-only | 仅在提交信息后显示已修改的文件清单 |
–name-status | 显示新增、修改、删除的文件清单 |
–abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 |
–relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”) |
–graph | 显示 ASCII 图形表示的分支合并历史 |
–pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式) |
–oneline | –pretty=oneline --abbrev-commit 的简化用法 |
-(n) | 仅显示最近的 n 条提交 |
–since, --after | 仅显示指定时间之后的提交 |
–until, --before | 仅显示指定时间之前的提交 |
–author | 仅显示指定作者相关的提交 |
–committer | 仅显示指定提交者相关的提交 |
format选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 -date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
format //git log --pretty= format:"%h - %an, %ar : %s"
1.11. 撤销操作
git commit --amend //撤销刚刚的commit操作
git reset HEAD //撤销刚刚的add操作
git checkout -- //撤销对文件的修改
1.12. 远程仓库的使用
git remote //查看当前远程仓库
git remote -v //显示克隆地址
git remote add [shortname] [url] //添加远程仓库
git fetch [remote-name] //从远程仓库抓取数据
git push [remote-name] [branch-name] //推送数据到远程仓库
git remote show [remote-name] //查看远程仓库信息
git remote rename [name] [name] //修改某个远程仓库在本地的简称
git remote rm //移除远程仓库
1.13. 打标签
git tag //列出所有标签
git tag -a [tag-name] -m 'description' //创建标签
git tag -s [tag-name] -m 'description' //签署标签
git tag [tag-name] //创建轻量级标签
git tag -v [tag-name] //验证标签
1.14. 设置别名
git config --global alias.co checkout //设置checkout的别名为co
1.15. 分支
git branch [branch-name] //创建分支
git checkout [branch-name] //切换分支
git checkout -b [branch-name] //新建并切换到分支
git branch -d [branch-name] //删除分支
git merge [branch-name] //合并分支
git branch -v //查看各个分支最后一个提交对象的信息
git branch --merged //查看哪些分支已被并入当前分支
git branch --no-merged //查看尚未合并的工作
1.16. 远程分支
git push (远程仓库名) (分支名) //推送本地分支
git push [远程名] :[分支名] //删除远程分支
1.17. 配置git
git config --help //选项列表
git config --global ore.editor //改变默认编辑器
1.18. 配置mergetool和difftool
git difftool --tool-help //查看当前支持的difftool
git mergetool --tool-help //查看当前支持的mergetool
git config --global merge.tool beyond //配置mergetool
git config --global mergetool.beyond.cmd \
'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"' //配置mergetool 路径
git config --global mergetool.trustExitCode false //通知 Git 程序的退出是否指示合并操作成功
git config --global diff.external //通知 Git 用什么命令做比较
例如配置beyond compare
//difftool
git config --global diff.tool bc4
git config --global difftool.bc4.path "bcomp.exe的路径"
//mergetool
git config --global merge.tool bc4
git config --global mergetool.bc4.path "bcomp.exe的路径"
这里要注意的是:“bcomp.exe的路径"这个东西不是"BCompare.exe”,而是"bcomp.exe"
如果出现虽然安装了bc但mergetool不可用的情况,可以通过修改用户目录下的 gitconfig追加difftool和mergetool的配置
[diff]
tool = bc
[difftool "bc"]
cmd = \"D:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
tool = bc
[mergetool "bc"]
cmd = \"D:/Program Files/Beyond Compare 4/BComp.exe\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
windows下配置
git config --global diff.tool bc4
git config --global difftool.prompt false
git config --global difftool.bc4.cmd '"D:\Program Files\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE"'
git config --global merge.tool bc4
git config --global mergetool.prompt false
git config --global mergetool.bc4.cmd '"D:\Program Files\Beyond Compare 4\BCompare.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"'
git config --global mergetool.bc4.trustexitcode true
git fetch --all
git reset --hard master
git pull #可省略
//1.更新本地文件的远程分支
git fetch origin
//2.本地与远程的差集 :(显示远程有而本地没有的commit信息)
git log master..origin/master
//3.统计文件的改动
git diff --stat master origin/master
//1.创建本地分支
git checkout -b 新分支名
//2.推送本地分支到远程仓库
git push --set-upstream origin 分支名
git checkout -b 本地分支名 origin/远程分支名
若不成功则执行 git fetch 后重复上述操作
git log 查看所有的commit提交记录
git show 查看提交的详情
1.查看最新的commit
git show
2.查看指定commit hashID的所有修改:
git show commitId
3.查看某次commit中具体某个文件的修改:
git show commitId fileName
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 stash list // 查看stash列表
1、添加改动到stash
git stash save "messeag"
git stash save -m "messeag"
git stash save -u "messeag"
git stash save -a "messeag"
-a表示all,是不仅仅把新加入的代码文件放入暂存区,还会把用.gitignore忽略的文件放入暂存区。如果想不影响被忽略的文件,那就要用-u,表示untracked files。
2、恢复改动
git stash list查看stash列表,从中选择你想要pop的stash,运行命令
git stash pop stash@{id}
或者
git stash apply stash@{id} 即可
3、删除stash
git stash drop 如果不加stash编号,默认的就是删除最新的,也就是编号为0的那个,加编号就是删除指定编号的stash。
git stash clear 是清除所有stash
4、git stash pop 与 git stash apply 的区别。
git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id
5. 查看指定stash的diff
git stash show
git stash show stash@{id}
补充:
注:[]方括号中内容为可选,[]里面的stash代表进度的编号形如:stash@{0}, <>尖括号内的必填
git stash 对当前的暂存区和工作区状态进行保存。
git stash list 列出所有保存的进度列表。
git stash pop [--index] [] 恢复工作进度
git stash apply [--index] [] 不删除已恢复的进度,其他同git stash pop
git stash drop [] 删除某一个进度,默认删除最新进度
git stash clear 删除所有进度
git stash branch 基于进度创建分支
补充:
查看git stash保存的时间
git stash list --date=relative
git stash list --date=short
git stash list --date=local
git stash list --pretty=format:"%C(red)%h%C(reset) - %C(dim yellow)(%C(bold magenta)%gd%C(dim yellow))%C(reset) %<(70,trunc)%s %C(green)(%cr) %C(bold blue)<%an>%C(reset)"
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 .. #生成两个commit间的修改的patch(包含两个commit. 和都是具体的commit号)
git format-patch -1 #生成单个commit的patch
git format-patch #生成某commit以来的修改patch(不包含该commit)
git format-patch --root #生成从根到r1提交的所有patch
git apply --stat 0001-limit-log-function.patch # 查看patch的情况
git apply --check 0001-limit-log-function.patch # 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上(注:git apply是另外一种打patch的命令,其与git am的区别是,git apply并不会将 commit message等打上去,打完patch后需要重新git add和git commit,而git am会直接将patch的所有信息打上去,而且不用重新git add和git commit,author也是patch的author而不是打patch的人)
git am 0001-limit-log-function.patch # 将名字为0001-limit-log-function.patch的patch打上
git am --signoff 0001-limit-log-function.patch # 添加-s或者--signoff,还可以把自己的名字添加为signed off by信息,作用是注明打patch的人是谁,因为有时打patch的人并不是patch的作者
git am ~/patch-set/*.patch # 将路径~/patch-set/*.patch 按照先后顺序打上
git am --abort # 当git am失败时,用以将已经在am过程中打上的patch废弃掉(比如有三个patch,打到第三个patch时有冲突,那么这条命令会把打上的前两个patch丢弃掉,返回没有打patch的状态)
git am --resolved #当git am失败,解决完冲突后,这条命令会接着打patch
如果打Patch的过程中发生了冲突(conflicts):
如果不想打这一系列patch了,直接:git am --abort。
如果还想打:
(1) 根据git am失败的信息,找到发生冲突的具体patch文件,然后用命令git apply --reject ,强行打这个patch,发生冲突的部分会保存为.rej文件(例如发生冲突的文件是a.txt,那么运行完这个命令后,发生conflict的部分会保存为a.txt.rej),未发生冲突的部分会成功打上patch
(2) 根据.rej文件,通过编辑该patch文件的方式解决冲突。
(3) 废弃上一条am命令已经打了的patch:git am --abort
(4) 重新打patch:git am ~/patch-set/*.patchpatch
1. git log 查看提交记录
2. 执行git rebase -i
3. 在弹出的界面中将需要删除的commit前面的pick改为drop
4. 保存
git remote update origin --prune
git branch -vv
git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字
git reflog 查看记录,
git reset --hard 或者 git reset --hard HEAD@{2}
//修改命令
git remote origin set-url [url]
//先删除,后新增
git remote rm origin
git remote add origin [url]
//直接修改config文件