1写在前面:
最近因为不会Git,被老板狠狠的骂了一顿,呜呜,
另外如果不在linux 或者非要纯命令行的情况下,建议上手PyCharm内置的Git很好使用.(疯狂打脸)
因为如果你非要用命令行 在合并冲突的时候 还得用VSCode手动合并冲突(或者大神可以用Vim),去分清<<<<<<<<<<===========>>>>>>>>>>>>到底谁是谁,还不如用好现成的PyCharm内置的Git工具.
嘻嘻,谁让我就想摸鱼呢
2找个文件夹克隆到本地 强烈建议不要命名中文(兵家大忌)
首先假设我们有一个仓库:
https://gitee.com/zhangsen1607212422/test.git
(这里用个人的私密仓库作为举例)
另外也许有人会报一个错误 什么什么什么 safe.directory的错误(在pycharm 的命令行中)
查看所有的safe.directory :
git config --global --get-all safe.directory
发现safe.directory中没有当前报错的这个文件夹 或者什么都没有(为空)
添加一下当前的文件夹 git config --global --add safe.directory 'xxxxxxxxxx'
然后 再查看一下就有了
当然也可以 清空 整个safe.directory 使用: git config --global --unset-all safe.directory
或者单独去掉某一个文件夹,不再赘述
当然也有个治标也治本的方法: 在c盘用户 用户面下有以哦个 .gitconfig文件,按照下图修改就可以。
3假设我的远程仓库是下面的情况:
有两个分支,其中有一个maser分支
另外一个feature/perf
看不懂 有疑问 不用管 一般公司都会有好几个分支,有已经上线的 还有正在开发的分支
本地分支情况:
一般克隆下来就只有一个master分支
或者命令行中查看分支情况
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/feature/perf
remotes/origin/master
仔细看 上面命令行红色的是远程分支 绿色和白色是本地的分支
*代表当前所在的分支(是绿色的)
4开始正式的开发
-
为了模拟正常的工作,我们多创建一个本地分支,可以用命令行 git branch -b xxxxx
或者在PyCharm中
可以发现我们当前所在的分支变成了feature/perf
-
使用命令 git branch -vv 查看本地分支和远程分支的关系,可以发现本地master和远程的master分支绑定了(蓝色色那一串,仔细看下 origin是远程分支的意思)
-
为了让在PyCharm Git工具中push 或者pull 的时候不需要每次输入指定的分支路径
-
我们应该 绑定下 本地分支和远程分支的情况 (或者需要更换绑定关系也需要这个命令)
git branch -u origin/远程分支名 本地分支名
5拉区远程分支,当你准备要push时候,养成pull 的习惯
6修改工作区代码并提交
提交版本变化 git commit -m "xxxxx"
Push 到远程仓库 git push origin 远程仓库xxxxx
7但实际上一般会更容易出现另一种情况 (如何解决冲突)
1就是你拉取的代码后
2在本地上做出了修改
3但没来得及push 远程仓库已经又更新了(别人push了新的版本)
相当于你落后远程的版本了
或者是每当你完成一个功能,准备push 时候, 你开发用了10年 这个时候别人都不知道push 多少个版本了, 你又舍不得自己完成的功能 很想也push上去
7.1假设你起初 跟的上版本的内容是: (就是别人还没push呢 即 你是最近的一次push者)
7.2现在你花了年完成了一个任务 想push了
假设这10年别人push到远程好几个新的版本 最终修改了这三个文件和你本地不同
7.3你在push前(commit 后)需要先拉别人的代码(养成好习惯)
或者说不是习惯,而是必须要做的,而且要勤pull ,这样不至于落后太多版本
还是和上面一样点 蓝色的朝左下的箭头 然后选择合并
冲突解决完了, 再次进行一下 commit 和push
8.如何删除远程分支的文件(不小心多上传了)
我明明已经在 .gitignore 中声明过了,但是远程还有那个文件? 一般是因为 这些文件依然被track(也就是被git add 追踪)
可以查看哪些被track了: git ls-files
可以 只删除这些track文件 gittrack文件 : git rm --cache xxxx
当然也可以连本地的(如果目前还有这个文件夹)也删除了: git rm xxxx
如何是一个目录: git rm -r --cache xxxx
删完以后,还要进行一次 git commit
9.关联多个远程仓库
可以使用命令添加,或者直接动在 .git/config
文件里添加。
比如一个项目同时关联一个 Github
仓库和一个 Gitee
仓库,添加一个 remote
就是了,比如:
[remote "github"]
url = https://github.com/rdif/xxxx.git
fetch = +refs/heads/*:refs/remotes/github/*
[remote "gitee"]
url = https://gitee.com/xxxx/xxxx.git
fetch = +refs/heads/*:refs/remotes/gitee/*
[remote "all"]
url = https://github.com/rdif/xxxx.git
url = https://gitee.com/xxxx/xxxx.git
fetch = +refs/heads/*:refs/remotes/all/*
或者 使用命令:git remote add 远程分支的本地代名词 远程仓库URL
比如 git remote add github https:xxxxx.git
也就是说后面的URL在本地的代名词是 github,后面 push 的时候 可以使用命令:
git push 远程分支的本地代名词 本地分支名字:远程分支名字
比如 git push origin main :master 这里 origin 只是远程分支的代名词
上面添加了多个远程仓库 以后就可以 git push github
main: master
这样当我们提交代码的时候,想提交到 Github
就用 git push github master
,想同时提交到 Github
和 Gitee
的仓库,只需要 git push all master
即可,这里master 是远程分支名字
10删除分支 恢复分支 重命名
# 删除本地 test 分支
git branch -d test
# 删除远程主机的 master 分支
git push origin -d master
10.1删除分支后恢复
# 查看记录,找到对应的 hash值
git reflog
# 创建test分支,并取对应hash分支所有内容,相当于恢复了被删除的分支
git checkout -b test hash值
10.2重命名分支
# 把本地的 master 分支重命名为 test
git branch -m master test
# 远程分支没法直接重命名,只能删了重建,主要分几步
# 1. git push origin -d test 删除远程分支
# 2. git push origin newtest 上传新的远程分支
# 3. 把修改后的本地分支关联远程分支
git branch -u origin/远程分支名 本地分支名
还不如直接去网页直接修改
比较版本之间的差异
这个就不建议用命令行了
如果用pycharm 的话: 只能对比当前的修改,和前面 某一个版本的对比
步骤4时候选一个 要和本地对比的版本 5.选择对比这个功能
接着就可以对比了:
一些其他有用的:
git commit
假设你对刚才commit 的内容有一次很小的更改,但你不希望历史记录中出现关于当前代码的多次记录,你可以使用下面的命令这些更改合并到前一次提交中
git commit --amend -m "新的提交信息"
git pull
拉取某个分支的内容:
git pull <远程主机名> <远程分支名>:<本地分支名>
贮藏 git stash
git stash
常用于把修改储存起来,需要的时候再取出来。常用于:
- 切换分支并且需要保留修改的时候
- 切换分支并且需要把修改带到新的分支的时候
# 存储并添加备注,方便查找
git stash save '备注信息'
# 查看储存列表
git stash list
# 取出储存中最近一次的修改并删除储存记录
git stash pop
# 取出储存中的指定部分修改,stash@{0} 0是默认的不写也行,是啥只要查看储存列表你就知道了
git stash apply stash@{0}
# 删除指定储存
git stash drop stash@{1}
# 删除所有的储存
git stash clear
切换分支保留修改
有时候比如我们在 test 分支上开发了一半,由于某些原因需要切换到 master 分支,但现在又不想提交,又想保留修改并且不带到 master 分支上去,就可以这样:
# 把当前分支的修改储存起来
git stash
# 切换到其他分支干你的事
git checkout master
# 干完了
# 切换回 test 分支
git checkout test
# 取出储存中所有的修改
git stash pop
# 删除所有的储存
git stash clear
切换分支转移修改
有的时候我们需要在 test 分支上开发,但是忘记了,活快干完了才发现当前原来是 master 分支,可是已经开发了,这时候就需要切换分支到 test,并且把已经开发的部分内容也从 master 分支带到 test 分支来,就可以这样:
# 储存master的修改
git stash
# 切换到 test 分支
git checkout test
# 取出储存中的全部修改
git stash pop
# 或者查看储存列表
git stash list
# 取出储存中的指定部分修改,stash@{0} 是啥只要查看储存列表你就知道了
git stash apply stash@{0}
# 再清掉储存
git stash clear