您的位置:首页 > 编程语言

git与GitHub学习笔记

2016-11-24 18:11 447 查看

git与GitHub学习笔记

近日学习了git与GitHub,内容是麦子学院老师关于git与GitHub的教程,话不多说先贴在此处以便于自己查看,也便于需要的人学习!

# 删除 untracked files
git clean -f

# 连 untracked 的目录也一起删掉
git clean -fd

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd

# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

git中没有被跟踪的文件一般为红色,跟踪单未被提交的维绿色

错误1
Git 提示fatal: remote origin already exists 错误解决办法
最后找到解决办法如下:
1、先删除远程 Git 仓库
$ git remote rm origin
2、再添加远程 Git 仓库
$ git remote add origin git@github.com:FBing/Java-code-generator
如果执行 git remote rm origin 报错的话,我们可以手动修改gitconfig文件的内容
$ vi .git/config
把 [remote “origin”] 那一行删掉就好了。

错误2
xg@xg:~/Desktop/git-test$ git push -u origin master
Username for 'https://github.com': xg0719
Password for 'https://xg0719@github.com':
To https://github.com/xg0719/test.git ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/xg0719/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决方法:
此时很多人会尝试下面的命令把当前分支代码上传到master分支上。
$ git push -u origin master
但依然没能解决问题
出现错误的主要原因是github中的README.md文件不在本地代码目录中
可以通过如下命令进行代码合并【注:pull=fetch+merge]
git pull --rebase origin master
执行上面代码后可以看到本地代码库中多了README.md文件
此时再执行语句 git push -u origin master即可完成代码上传到github

错误3
对于使用git status -u (-u可以去掉)时候,出现
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
解决办法:
git pull --rebase 即可

错误4
ECS服务器ssh登录提示“Permission denied, please try again
原因:密码错误,系统不允许远程登录
密码错误重新输入密码,远程登录被禁止就启动远程root登录就好了
1、在ssh提示上述信息时,可以在管理控制台通过Web VNC连接管理终端连接服务器进行测试,如果使用root和密码可以登录,说明帐号与密码是正确的。
2、检查/etc/ssh/sshd_config中的PermitRootLogin,该参数指定是否允许root用户通过ssh远程连接服务器。PermitRootLogin设置yes时表示允许root通过ssh连接服务器,为no时为不允许。

拿到项目后,先克隆代码到本地,然后在新建分支,代码写在新建分支中;若无误则将代码合并到主分支中,以提高代码的延续性

20、文件忽略
当对文件进行忽略后,更改文件内容后不会影响版本库(不提交不会影响其它命令的正常执行)

包括项目忽略和全局忽略两种

19、免密码登录下  --待看
18、免密码登录上  --待看

17、Git服务器的搭建
(1)在远程服务器上面新建一个git服务器
ssh root@IpAddr(域名) 进入服务器,
cd /opt
mkdir git
初始化git仓库
git init --bare test.git
(2)本地新建git工作区
touch index.html
git add index.html
git commit -am "add index"
git remote -v  查看远程关联
git remote add origin ssh://root@ip(域名)/opt/git/test.git
git push -u origin master
然后git clone ssh://root@域名/opt/git/test.git 将其克隆到本地

16、Git与GitHub-lias别名
git config --global alias.ci commit 将commit取别名为ci
修改别名后git ci -m "chagne commit to ci" 中的ci和commit就一样了
例如常见的别名为 checkout co;checkstatus ct;log
git config --global alias.lg 'log --oneline'
注意:学习视频中最后一个log的参数命名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

15、 fork 和pull request
打开一个github.com账号如: https://github.com/xg 随意找一个项目,如t1,点击右上角的Fork就看以将该项目分支到自己的github中,Fork的项目中包含原作者的信息,当我们对Fork的版本修改好了之后,我们可以创建一个pull request来通知原作者;
原作者收到pull request后就可以看到pull的信息,如果觉得合适的话可以将其合并到自己的版本库中,类似于commit merge功能;
当发现合并错误的时候,我们可以用Revert撤销之前的合并

14、git pull和git fetch的区别--非常重要,需要继续看一遍
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git pull:相当于是从远程获取最新版本并merge到本地

对于1个项目,AB两个人都需要使用,如何让B修改的内容可以让A查看到?
B修改index.html后将其提交到GitHub
git commit -am "add index.html"
然后将其提交到远程的dev中
git push origin dev

当B修改dev分支后,A需要获取修改信息,因此要讲dev分支pull到本地
git pull origin dev

内容1如下:
(1)
修改A的README.md并且提交
vi README.md
添加如下内容:
this is a'dev
然后提交修改:
git commit -am "modify readme.md"
(2)
修改A的README.md并且提交
vi README.md
添加如下内容:
this is b'dev
然后提交修改:
git commit -am "modify readme.md"
(3)
将B中的更新提交到远程仓库中
git push origin dev
然后对A进行git pull origin dev会出错
【
<<<<<<< HEAD
this is a'dev
=======
this is b1'dev
this is b'dev
>>>>>>> dcd521cd754062ee7065ef6902962bc4cd96fc3b
xg@xg:~/Desktop/testA$ git pull origin dev
U       README.md
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
】
然后对A的README.md进行修改提交即可
git commit -am "modify readme.md"
提交后对A pull就正常了

内容2如下:
(1)
修改b的readme并且提交
然后git push origin dev中,使版本库的Readme内容发生改变
(2)
在A中git fetch origin dev
如果正常则合并分支
git merge origin/dev --no-ff

注意: pull 更新并和合并本地分支;但是fetch 更新远程分支,但是不合并本地分支,若远程分支达到要求就可以进行选择合并了

1)
git push -f
2)先把git的东西fetch到你本地然后merge后再push
$ git fetch
$ git merge
这2句命令等价于

13、git remote和git clone
git clone https://github.com/xg0719/test.git 将远程的代码克隆岛本地
git branch -r 查看本地和远程的对应关系

git checkout dev
git push -u origin dev

git branch 查看本地分支
git branch -a 查看远程的分支
正常情况下git clone只克隆了master分支,如果想克隆dev分支,则应该如下操作:
git checkout -b dev origin/dev 将dev和master建立关联

git remote remove origin 将远程版本库和本地关联取消掉

xg@xg:~/Desktop/git-test$ git remote -v  查看本地和远程版本库的关联
origin  https://github.com/xg0719/test.git (fetch)
origin  https://github.com/xg0719/test.git (push)

git remote add origin https://github.com/xg0719/test.git 再次建立远程关联

git remote rename

12、github的简介
git是版本控制工具,github是托管平台 https://github.com/ github 提供public和private的仓库,一般公司不会发钱买private仓库,多自己搭建github服务器

关联本地git仓库到远程托管中心
git remote add origin https://github.com/xg0719/test.git git push -u origin master
然后输入github的用户名和密码即可

11、GitHub -Bug分支和feature分支
git merge dev --no-ff -m "merge dev test"  合并分支

git checkout -b bug_001 创建并切换到分支bug_001
在dev中修改的index.html文件,在其它文件中的index.html也会有修改

git checkout dev
git stash   将dev中的文件进行封存
然后git checkout bug_001就会发现修改的index.html没有影响master和bug_001

git stash pop 还原封存的分支
git stash list 查看封存的列表
git stash  apply stash@{0}  执行某一个封存,其中stash@{0}为版本号

当项目中需要增加一个新功能的时候,一般先建立一个新的feature分支,该分支开发的好的话就合并到dev分支后者master分支,该分支不太好的话就直接删除即可
git checkout -b feature_001

10、git merge下
(3)禁用快进的合并
git merge dev --no-ff -m "merge dev --no-ff" 即为增加了--no--ff(fast forward)

分支删除
git branch -d 分支名称
例如: git branch -d dev 删除dev分支
分支修改
git branch -m A B 将A分支修改为B
例如: git branch -m dev2 dev

9、git merge上
git merge dev 将dev分支的内容提交到当前分支

git diff 可以检测到文件的变化,检测到添加删除的某一行
git diff dev..master 比较两个分支的差别
(1)理想的合并
当A中文件比B中文件少的时候,将B合并到A中可以正常合并
(2)解决冲突的合并
当AB中都有某个文件的时候,若果只用git merge B 将B中文件合并到A中的时候会出现如下冲突:
Auto-merging readme
CONFLICT (add/add): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.
很明显有问题,此时查看有冲突的文件,内容如下:
<<<<<<< HEAD
readme master
=======
readme dev
>>>>>>> dev
其中=上面的维master中的内容,=下面的为dev中的内容,我们需修改有冲突的文件,使之以某个文件为准,如以dev分支文件为准则保留有=和>>>>dev之间的文件即可
然后再git add 和git comm即可完成合并

8、git branch
git branch 查看版本
分支可以存储文件,而不影响master分支
git branch branchName 创建分支
git checkout dev 切换到dev分支
使用分支之后,若改变从分支内容,主分支不会受到影响

进入某一个分支后,若修改某一个文件,则修改后需要 git add 和git commit来提交修改的文件到当前版本中;修改当前版本张的文件不会影响其它版本中文件内容

7、git reset
git commit -m "add index.html"
git reset HEAD^ --soft   将某一个文件从提交的分支撤销到暂存区中,使用status时候提示有一个文件未提交(既在暂存区)
git reset HEAD^ --mixed  重置某一步并且并且将文件从分支和暂存区中撤回来,导致文件没有被跟踪(untracked files)
git reset HEAD^ --hard  重置版本库中的文件,并且本地文件也一起被重置了(人本地文件一起被删除),既一律返回到某个版本(直接影响工作区的文件,一般情况下不可以使用)
重制某一个提交,而不是改变所有的提交;get revert HEAD~n则在0-n中的提交将全部被撤销了
3241dd3
也可以使用版本号来重置版本git reset 版本号;
对于untracked的文件可以先使用git add filename 然后使用git commit提交到版本库中

6、git revert ;git reset
git revert HEAD 撤销当前版本
git revert HEAD^ 撤销上一个版本
git revert HEAD^^  撤销上两个版本
git revert HEAD~8 返回第8个版本
对于revert处理删除版本库中的文件,还删除了本地文件;对于一个文件,若希望删除版本库中的文件,而不删除本地文件,则可以使用git rm 或git rm --cached两种方法

5、git rm
若把test.js加入到暂时存区后,再rm test.js,则需要删除暂存区test.js 或者回滚删除操作
git checkout -- test.js
或者git rm -f test.js
git checkout -- main.js
git commit -m "rm main.js"

4、gitHub --git mv--待查看
git log
git mv  对暂存区的文件(git add file)进行修改
git log --oneline  单行显示log信息

3、工作区和暂存区
git init  初始化工作区
git status  查看版本库内的信息
git add index.html  蒋index.html 添加到版本库中的暂存区中
git commit  将暂存区中的目录数量提交到master中,index.html中的内容都会存在objects中

2、git与github帮助文档
git --version
git help -a list all subcommands
gid help commandName 查看命令的功能
git help config 查看配置
git config --global user.name 'git-xg'
git config --global user.email '861653644@qq.com'
git --unset --global user.name 重置用户名称
git config list 查看用户配置
cd ~  ls -la (。gitconfig)

1、
GitKeeper
SVN 和 Git
SVN有一个代码控制中心,其它人只能从中根据权限获取相应代码,因此公司多用svn,而个人可以使用不受权限控制的git


以上是最近的学习笔记,内容仅供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息